Achieving greatness as a developer is as much about business knowledge and people skills as coding smarts, says Dan Frost
At heart, I'm a techie. I love the nerdy detail and the things you can do with lines of code. But at times I hate the pain of coaxing results from developers or coercing them to ‘think like a human’. This can damage the project, the product and the team.
I’m not alone in this, and developers should be wary. Development is getting easier and non-techie people can build loads of things nowadays without touching a line of code. So any developer worth the salt needs to rise above the IT Crowd mentality.
Pulled in two directions
That’s not to say it’s easy for developers, of course. They’re being stretched in two directions: towards the human and across the full technology stack. The first of these comes out in books like The Passionate Programmer, while the second comes in the form of the DevOps trend, urging developers to understand more than just the files they create and edit.
If you find a developer who’s strong in both these areas, grab them!
Let's start with the human side of things. In our industry everything is communication, from the ethernet cable to the brand image. A keen understanding of the technical side is useful, but it’s useless without an understanding of the real world. Recognising this divides developers into two camps: those who can get through code and those who can create really useful software.
Regarding the former, it’s not always their fault. Too often developers have come from environments where they've worked alone, kept away from the users and their real requirements, and kept separate from the production environment. They’ve had to work with the technology someone chose 10 years ago because "that's what we use". None of this lends itself to happy developers who get on with the rest of the company and produce amazing results.
Great developers understand the business they work in, not just the code. They appreciate the business rules and operational requirements of the people working around them because without this they'll generate code that fixes no problems.
As in any profession, the ability to understand and communicate with other humans well makes you more useful. Devs are prone to thinking about what's in front of them as important (as are we all). The danger is that they don't care about what they can't see or hear, and so the focus is often on code rather than the result. (Read Thinking, Fast and Slow for more on how easily we’re distracted by what's in front of us.)
In contrast, when you sit with a developer who understands your business you see something very different. They know how the users interact with the DB and how it's likely to evolve. In fact, business knowledge can outweigh technical knowledge because these guys simply get the right things done, rather than hellishly creating code-for-code's-sake.
For all the lovely, nerdy lines of code, if all you need is a simple fix then go with that.
But there's more to being a great developer than just being human. The Passionate Programmer outlines many ways in which programmers should continuously up their game, learn new skills and generally not slow down. Programmers have to learn new things quickly, be it for a new project or just implementing a new feature for an existing product.
Great developers will take on a project just for the stuff they learn from it, something much more than 20 minutes of the howtos. Github has transformed pet projects in CVs and the very best will be doing this to production standard, not just copy/pasting code to see the example work.
Know the platform
Devs need to know the platform. The Passionate Programmer puts this in terms of understanding the run-time environment: if you program in Java, understand how the Java Runtime Environment works. If it's Ruby, know the Ruby Interpreter and read the source code for it. Devs who understand the platform can fix faster because they solve problems from the bottom up. The rest will just try things until they work, however long that takes... and that can take a long time. A long, long time.
This relates to something that should be mandatory for every developer these days: devops. Cloud computing has made everything software: servers, routers, disks, the lot. Developers need to understand how their stuff works in production and what the operational requirements are.
In devops, developers know, understand (and kinda love) everything about the platform they're running on. You not only get more out of the dull infrastructure but you might even end up building stuff none of you thought possible.
These ideas aren't mine and many aren't new. The idea that a techie should understand the real world is fundamental to the design and build of anything: houses, cars, MP3 players...
So why the rant? Surely these days every developer that walks through the door understands not only NoSQL and mobile development but also basic UX and how to work in a team? If only. This is sadly lacking in too many candidates and finding developers with a rich enough skill set takes time. It's worth that time, but the industry as a whole is expecting more.
There is a lot of advice out there, both for developers wanting to be truly useful and anyone working with developers to expect a little more. The market is getting more competitive so arm yourself both with excellent devops skills and the ability to think like the humans you work with. And, if you're hiring developers then help me make the world a better place: expect more from them. They'll thank you in the end.