How to be a great developer
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!
Communication skills
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.
People skills
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.
Pushing yourself
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.
Why rant?
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.




12 comments
Comment: 1
Comment: 2
Comment: 3
[img]http://www.filii.info/pclab.gif[/img]
Comment: 4
In my opinion the ideal for a workpace is to gather specialized developers that suit your needs and have them work together. This is where I would like to be.
Comment: 5
Comment: 6
Thanks for putting your thoughts into words, Dan!
Comment: 7
Maybe from a one man band perspective the above description is correct, however I would be tempted to say (as others have) that it is too much for one person. Therefore maybe a two man band would be more efficient and ultimately provide an overall better service.
Thanks
Comment: 8
Comment: 9
Studying the source code of other programmers is an excellent means of improving your own skills. Work your way through their code, step by step, working out the flow and what happens to the variables. Then try to write your own code to do the same thing (or maybe even improve on it). You'll quickly learn why things need to be written a certain way and you'll also pick up some useful tips on how to write efficiently.
Thanks
Comment: 10
You don't have the time to do anything else, especially business related. You don't care about marketing, you don't care about who was fired today. All you care about is what you are developing.
I something wish there were 100 hours in a day! Good article though.
Comment: 11
Comment: 12
I am a designer but with development abilities.
I saw on the Adobe Creative Week website the debate topic:
Should designers/developers be a Jack of all Trades, or the Master of One?
What do you all think? Opinions from both Designers & Developers welcome.
Should there be a crossover or are these two separate disciplines that should be kept separate?
Anyone annoyed or pleased by the blurring of design vs development roles?
Look forward to your opinions folks.... Cheers
(Link to the Adobe Creative Week site here: http://bit.ly/Kic1Fk )
#CreativeWeekUK