Maintainability 101
Yesterday was scalability day and today I’m continuing through the basics of building software by tackling maintainability. As we said yesterday organizations like ours find a really simplified agile user story a particularly effective way to communicate these principles; it’s a format people are already intimate with, practiced at delivering against and I personally like the fact that the basic clauses (as a… I want to… so that… as proven by…) force a habit of thinking about the business value of an idea rather than just raw requirement.
So how would a user story for maintainability look? Building on how we decided to tackle the “as proven by” clause yesterday let’s throw it in right away:
As the CTO, I want to govern a set of products benefiting from continuously improving feature time to market and able to be fully maintained online, So that our delivery capacity becomes more consistent and efficient, As proven by appropriate and justifiable answers to the maintainability questions.
Again keeping in mind the keywords appropriate and justifiable; you’ll have to keep in mind the expected lifetime your application will have (yesterday we talked about seasonal features) and what it’s future roadmap is; how many more features are on the horizon? How is it likely to be extended? Are the windows for maintenance that do not affect revenue? Not everything needs to be hot maintainable but you need to be able to modify it quickly and easily when you do.
These are the sorts of things do you need to ask yourself ask you work:
- How will I upgrade this hot?
- How will I add features hot?
- How will changes be rolled back without tattooing?
- How can I run multiple versions of my feature concurrently?
- How have I isolated the feature to limit the scope of future changes?
- How have I limited the manual effort required to deploy?
- How will I add or reduce capacity online?
- Is all my functionality exposed via an API?
- How have I prepared my feature for quicker future time to market?
Having sensible answers to these questions will help make sure you’ve prepared your product the best way possible for future development.