Andrew C. Oliver
Contributing Writer

The good software development manifesto

analysis
Aug 10, 20174 mins

Software development is more than knowing what APIs to call or basic syntax. Hereโ€™s the whole picture of what app development really is

data rescue event nh lauren moore1  100713818
Credit: Sharon Gaudin/IDG

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.