Why your digital restaurant needs a clean and well-maintained kitchen
Software maintenance is important, and warrants more analogies. Maintaining a restaurant is an obvious thing to do. With software, maintenance is not as obvious as it is in the physical world.
Maintaining a restaurant
You: "Can I have the Tiger Prawn Goan Curry, Chips and Mixed Garden Leaf Salad, please?"
Chef: "Sorry, that will take 4 hours."
You: "Why?"
Chef: "I haven't cleaned for a few weeks. I need to wash pots and pans, scrub the surfaces, scrape the grill, restock, throw out the old stuff in the freezer..."
This scenario rarely happens of course. Maintenance activities are a business as usual activity. They are mostly invisible to the customer, except for the clearing and cleaning of tables. The customer's bill doesn't have a line item for maintenance. It's an operational cost to the business.
When maintenance activities are neglected, risks increase. Customers get food poisoning. Staff get stressed, then leave. Hiring new staff happens in a state of panic. Standards slip. Food inspectors enforce action when things get really bad.
When risk is so high, operations, and therefore customers, are impacted. The restaurant must close for a deep clean and reorganisation, or permanently close. Some equipment must be thrown away because it's so encrusted with harmful, hard to clean bacteria. And replacement parts don't exist anymore.
Customers value good food, and a memorable experience. They don't value what happens behind the scenes.
Maintaining Software
Clean as you code
Back to software. Customers value working software. Customers value quick response to their changing needs.
The expected lifetime of software is important. The longer the lifespan, the more significant maintenance becomes. The value of maintenance is the capability to respond to changes within reasonable time. Maintenance keeps things simple or, at the very least, enables you to manage complexity.
Clean as you code. Make it part of your daily work.
Or neglect cleaning
When you code, without cleaning as you go, risks build up. Software becomes harder to keep working and harder to adapt to change.
Unmanaged complexity makes it riskier to deliver new business value, address security vulnerabilities, remain compliant with regulation, and keep operating at an acceptable level of performance.
Expedient repairs are the natural state for software lacking preventative maintenance. They are costly and treat the symptom, by continuing to deliver value in risky ways.
Reorganise as you change
Some restaurants aim to keep quality high, so stay small and exclusive. They know what they're good at, their staff and customers value this specialisation.
Some restaurants want to adapt their business, offering more choice to more customers perhaps. They hire extra staff, perhaps invest in larger premises but most importantly they reorganise around a suitable commercial kitchen layout, factoring in the most important considerations - ergonomics, space, staff communication and safety. The outcome remains the same - good food, with more choice, to more customers.
Likewise, software that powers a product must reorganise as it scales its features and gains more customers. Reorganise software into small, disposable components. Small components are easier to build, clean and discard. Small is less complex, easier to change and keep working.
Build evolutionary architectures.
Or don't reorganise
Complexity goes up therefore risk goes up. Software is harder to keep working and harder to change. Ultimately, everyone gets stressed and your customers are impacted negatively.