Maybe it’s because usability was such a strong focus of mine for such a long time but I feel like most good ideas boil down to usability. It’s kind of my “grand unifying theory of good practices”. To me, Agile Software Development is about providing good usability to the customer (not necessarily the user). Clean Code is about good usability for other developers. They’re both about going the extra mile to make someone else’s life easier.
Not convinced? Well, I hope it’s easy to see how Clean Code will make code more usable for its future maintainers. That’s why I’ll concentrate on making the case that agile software development is for product development what usability is for product.
For starters, the first agile principle says
Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.
There are a number of ways in which common agile practices coincide with usability best practices:
- You’ve got no idea what is going to work unless you’ve tested it with users -> You’ve got no idea what the customer really wanted until you demo it to them. Short feedback loops and frequent reviews win the day.
- Don’t make people second-guess where they are. Always show them where they are in the flow. -> Be very clear about progress and status of the work. Visualize everything.
- The user should be in control -> The customer should be in control, i.e. able to change their priorities. Again, frequent reviews with the customer are a really good idea.
- Provide clear entries and exits -> E.g. Scrum does this nicely with the Sprint Planning and Review framing sprints. (Unfortunaly Scrum sucks at speaking the customer’s language with its abundance of jargon.)
That’s the parallels I’ve got so far. That’s why to me agile is not about freeing developers from the clutches of evil managers or so. Not primarily anyway. Primarily it’s about self-discipline and caring about someone else’s experience more than your own.
PS: What’s your great unifying theory? What can you trace everything back to?