On Software and its Features

How Good Software Goes Bad
Our buddy Siqi, coder of Facebook Mafia, and RoR developer with our friends at Powerset, wrote a comment to Aaron’s last post. This stirred me to write my own (software developer’s) analysis of designing and writing software and picking the “right” features.

In The Republic Plato reminds us that “Necessity is the mother of invention.” This rings as true for invention, as it does for software. Or, at least, that’s how it should be in the ideal world. At the two extremes of the set of all bad software (web or otherwise), there are applications that 1) have a small array of features, but fail to fill any real a need/necessity or 2) have a ton of features, attempting to address a swiss-army knife set of problems and/or needs. In general, I believe in this: software that addresses a highly specific necessity and addresses the individual subsets of that necessity, on a feature-by-feature basis, is good software. To avoid philosophical discussions on the aspect of good vs bad interface design, accessibility of said features is a feature in itself, and thus a part of that subset.

So, as software developers, both web-based, and otherwise, how do we solve the above dilemma? I think one could write a doctorate paper on this subject. I, however, will humbly attempt to stick to the basic facts of my understanding of the matter. Good software begins, by definition, with an analysis of need. Unfortunately, software developers can never truly predict how their users will actually respond to their feature set. This is precisely why software should be designed incrementally with the core features that address specific problems. In my conversation with Siqi a few weeks ago, he posed an interesting interview question that he had been asked in the past (while the interviewer handed him nothing more than a piece of blank paper and a pencil): “Please build me a house!” Not surprisingly, Siqi informed me that the majority of candidates would begin their response by taking said piece of paper and drawing a proposal for the construction of a house! What is wrong with this picture?!?! In one of his witty cartoons Hans Bjordahl does a very good job at answering this question:
High Level Design
The idea here is that to write good software, it is the developers responsibility to first completely understand the need on its very basic level. In the case of the house, questions like “What size is the plot of land on which the house needs to be built?” or “How many rooms are needed?” are the types of questions a developer should ask when faced with the task of writing software — drawing a box with a triangle for a roof doesn’t quite cut it! I am surely going to use Siqi’s interview question when interviewing developers for our startup.

After the basic need is understood, very specific features should be designed/coded to address this specific need. Everything else comes through the maturity of the product, and the products’ users are the only ones to dictate that maturity. All in all, the design and coding of software is a highly iterative process. It requires user input at every step of the way. Thus, sticking to the core features first, and changing and building along the way is probably the only way to go — at least for startups. This methodology, however, does not only apply to smaller companies and startups. If it’s working at Google (12000+ employees, last I checked), it can work anywhere!

Iterative development is a subset of XP (eXtreme Programming). For more on XP, please start with the Wikipedia article. If you or someone you know chooses to write a detailed paper on the subject of software development using XP methodologies, I’d love to hear about it.

Alex Notov has been writing code since the age 10. He is a web application developer since the age of 17. Now 23, he is managing editor at Startupism.com, and Chief Geek (he isn’t a fan of formal titles) and co-founder of a Silicon Valley startup.

2 Responses to “On Software and its Features”

  1. software developers Says:

    Well said. Every new software should include a solid marketing research behind it.

  2. Eugene Varshavsky Says:

    I have learned to expect thought provoking, engaging, and highly informative statements and posts from Alex. Keep up the good work, my friend, we are listening (and reading).

Leave a Reply