Software development is more than knowing what APIs to call or basic syntax. Hereโs the whole picture of what app development really is
Much has already been written and much will be written about James Damore and his โThe Google Manifesto.โ (Iโve also written about how organizations can mitigate and detect bias.) As for Damore, his screed is the kind of recycled garbage that has already been studied and refuted. It flies in the face of history and ignores the data right in front of Damoreโs face. For writing this dammed illogical dribble, no developer has ever been more rightly fired.
Beyond the moral confusion Damore shows, he also doesnโt seem to actually understand engineering, as former Googler Yonatan Zunger wrote in a brilliant response to Damoreโs manifesto. Zunger is right: Damore isnโt a good engineer or software developer. Software development is more than knowing what APIs to call or basic syntax.
So what exactly makes a good software developer? Here it is, in the kind of manifesto we should all be reading and taking to heart. I call it The Good Software Development Manifesto.
1. Believe in data
You may want to believe the system works or that youโre โbetterโ than certain people, but you need to have data to support this idea. Most of all, you need to be willing to give up the idea if facts (or countless studies and history) prove that youโre wrong.
This means you need tests to prove your code works, and you need processes around your code that produce data that prove youโre not reverting code. Everything you do should produce data that lets you make further decisions. Otherwise, how do you know if youโre doing the right thing?
2. Software development is more than coding
Just like letter-writing is more than the words per minute you can type on a keyboard or knowing vocabulary and grammar, software development is more than coding. Software development beyond relatively simple things requires coordination, communication, analysis, design, testing, project management, and more.
Coding is important, but it is important in the way an engine is important in a car. The best software developers have empathy for others who have different roles, interests, and stresses on them.
3. Code is communication with people (or: Be social)
One of the first โlanguagesโ I learned was 8086 assembler. That was as close to the metal as I ever came. If we were really just โprogramming computers,โ we would all be writing bytecode. Computers understand it best. But weโre writing in a โcompromiseโ language that other people can understand and that can be translated to something the computer understands.
Good software development is a communication process. Itโs about making sure people understand what youโre doing and why for that moment when you need a hand. Your job is to communicate with the next person reading it. Finding the best way to say it may require empathy.
4. Good processes are important
Conwayโs law predicts that your software is doomed to reflect your team and its communication structures. Process is the structure of that communication.
Think of a plane taking off: You have a very structured conversation among the pilot, copilot, flight crew, and air traffic control. That ensures that everyone looks after critical issues and that everyone is heard. โWings still attached to the plane?โ โCheck.โ โNo other plane in our way?โ โCleared for takeoff.โ
5. You prove yourself with results, not โstatusโ
The worst development organizations are either very hierarchical or have too many bosses per developer. That typically reflects a desire for status by being a manager.
Think โroles,โ not โstatus.โ The best organizations Iโve worked in recognize the people who made things happen first and foremost regardless of their role in the organization. (This recognition usually starts with whoever brought snacks, to be honest.)
6. Everyone can learn from everyone
If you believe that peopleโs ethnicity, gender, or whatever is a good way to judge their skills or what they have to teach you, youโre limiting your own development as a software developer.
7. Test all your assumptionsโand be ready to change them
When mentoring young developers I always emphasize that you shouldnโt prove yourself right, but to prove yourself wrong. I also encouraged them to do it with the same gusto that they try to prove themselves right.
A logical theory tends to have a means by which you could be proven wrong. If it doesnโt, it probably isnโt a very good theory. If you canโt prove it wrong, then and only then maybe try and prove it right. This is a similar idea to โbelieve in data,โ but itโs not just about the data but the means in which you use it.


