I’ve been developing software professionally for over 10 years now. If there’s anything I’ve learned in that time it’s this: nothing pushes questions about a project like trying to implement its features in software. Try to implement a piece of software of even the simplest feature set without asking any questions. Go on. I dare you.
And, yet, I’ve been struck with the limited nature of the questions most developers ask. As a general rule, I rarely hear developers ask the deep and detailed questions necessary to understand a project’s context, genesis, need, vision, etc (except at Atomic Object, of course). Too often noses go to grindstones working on specified features without even so much as understanding why a project is named as it is.
I’ve also been thinking about this verb “write” used to describe the creation of software. We software developers say we write software. Further, in Agile development there’s this idea of a feature “story.” A “story” often connotes the act of writing as well. In some sense, then, are we writers? What kind of writers? What category of writing? Certainly not fiction. If not fiction, then what kind of non-fiction? Given the types of questions we should be asking — who? what? where? when? — perhaps writing software is as much an exercise in journalism as it is bytes, compilers, and algorithms.
Good journalism simply strives to report facts. Great journalism puts events, people, motivations, experiences, and interactions into a broad context. It seeks to reveal a bigger picture, connect events, and even at times bring about change. This feels right; this description of journalism captures something essential and necessary about the process of software development. Entering into software tasks without the mindset of a dedicated journalist might bring about good software, but it won’t deliver great software.
Developing software requires so much more than only technical skills. Software projects are riddled with unknowns, implicit customer assumptions, undiscovered opportunities, muddled feature requests, and a myriad of pitfalls. Engaging these requires asking questions and doing so with the intent of digging beneath the surface to truly understand your project, its challenges, and your customer.
Want to be a super developer? Get your Clark Kent on.