Developing anything in the digital realm can be fantastically rewarding precisely because the ropes on our wings of fantasy are greatly weakened. We can imagine practically anything, and we can implement a lot of what we can imagine. The whir of excitement in our stomachs at the vision of some excellent idea prompts my favorite utterance, “Wouldn’t it be cool if…”
Unfortunately, our flights of fantasy must interface with the “physical” world, even if through the digital medium. Faster than light travel doesn’t exist. Perpetual motion doesn’t exist. There is a cost for everything, and it’s thousands of orders of magnitude greater than the few molecules of ATP that literally fueled our fantasy.
No great revelations there. But it sure helps to ground ourselves with this frequent reminder.
When it comes to software, I find that the single most difficult thing for anyone to do is think outside of the Feature Fantasy. This applies to everyone, developers, designers, clients, users, people. Everyone. With a breathless hop, skip, and jump, we leap right over the problem, the solution, and into some particular implementation. It’s so automatic I would have assumed that we’d been taught how to do this in specialized classes since grade school, with some folks getting advanced university degrees in it.
At PLANET ARGON, one thing we are trying to develop through our process and our exploration of d3, is how to effectively separate the problem, the solution, and the implementation. I would say better than 90% of our discussions start out at the feature, or implementation level. We actively and tireless attempt to refocus this back on the problem, describing and documenting it so we can think and dialogue about solutions.
As Jeremy has explored a bit in his article on Feature Ecology, the interaction or relation between features actually alters the product as a whole. Again, not an astounding idea, but the consequence of this is that a lot of time is spent chasing your tail if you focus on features without the benefit of well understanding the problem and solution.
Another benefit of focusing on the problem and solution is that it provides a natural meeting ground between clients and developers. Often the clients are not the users of the software. This makes it even more important to explore the problem to be solved rather than the client’s ideas of particular features. One of the most valuable things I took from reading Alan Cooper’s original About Face almost a decade ago is that no one would use your software if they didn’t have to. How’s that for a response to, “wouldn’t it be cool if…”
If you want to create software that people won’t hate using, focus on the problem and a very good description of a solution. Use your solution to implement a product. Get feedback from people on your understanding of the problem, your description of a solution, and only lastly, on your implementation of the product.