Sustainable Design

What is sustainable design in reference to Software?
Caveat: This is not a research and analysis paper. Its a work based on the heuristic rule/knowledge gained over period of time by myself.
I take this opportunity to delve into one of the hot topics of design field.
I have searched the whole of web and found many references and articles about sustainable design(which is more akin to environmentally friendly methodology and approaches). This blog is to broaden or expand the definition of sustainable design and find how much it is relevant to the software systems. In the same line, there are references in the web to sustainable software development(I am not going into that topic either). That said,lets find out what is my perspective about this topic in relation to software.
My definition: Software systems that are designed with the mind that performs or functions for prolonged period of time with the same efficacy, with no cost or limited cost or cost effective maintenance. In other words how does one develop software systems that incurs zero or close to zero maintenance cost. let me justify my definition. Predominantly, contemporary software systems that are designed , bring in with them a whole slew of issues like bugs,usability issues , maintainability issues, extensibility issues etc,. And all this put together , i call as unsustainable software design(which cannot sustain for prolonged period of time). No wonder the life time of software is as short as microorganisms. My industry experience comes in handy here to suggest few industry proven strategies and techniques that can circumvent these downsides of unsustainable software.
Five Pointers to building Sustainable Design in software:
1. Segregate and isolate change.
Addresses : Maintainability and Scalability
Argument : Extract from wiki – “A common perception of maintenance is that it is merely fixing bugs. However, studies and surveys over the years have indicated that the majority, over 80%, of the maintenance effort is used for non-corrective actions (Pigosky 1997). This perception is perpetuated by users submitting problem reports that in reality are functionality enhancements to the system.”
Enhancement can be accommodated, if and only if, one have segregated the varying components and allowed to vary in its own terms, without affecting the existing code base. Reminds my favorite – Open Closed Principle. Also,design patterns can be selectively leveraged to tame the change factor(monster) in complex systems, increasing the life time of software systems, by not overshooting the budget.Repeat – Develop modules / objects / dlls / interfaces that encapsulates change and allows to vary independent of constant component.
2. Thinking ahead of curve.
Addresses : Maintainability and Scalability
Always, leave room and scope for inserting future requirements(both technical and business) in code. Don’t apply this at a granular level but at a very coarse level,unless the requirement specification insists. Sometimes this pointer might work against YAGNI( You aint gonna need it) and Agile Scrum KISS philosophy, but contextual trade-off can be turned to ones advantage.
3. Agile Scrum practices – to nix the bug before they hatch/usability issues ; customer engagement + TDD. Bug free systems with higher usability rate.
4. Sustained Performance – Build prototype and run against data(overload). Test robustness of performance at early stage and compare performance against established benchmark at the end of sprint cycles. If current data is estimated to be around 2GB , run the prototype against 6GB and i am darn sure that it will be a cake walk for the app as it matures.
5. Passion – to develop systems that distinguishes itself in longevity(Built to last). This might be a bit overdriven subjective pointer, but i believe that passion helps you get focused and turns on the internal reality check meter in gauging the day to day decision’s alignment to abstract and pure goals of sustainable design.
Long live software!.

Leave a comment