In Capitalism 3.0 Barnes used computing as a metaphor for a paradigm change in the world’s operating system. This gives us a new twist: at an abstract level (rather than infrastructural) to what extent are computing and sustainability already intertwined?
Software engineering has perhaps already adopted a sustainable approach without explicitly realising it – Agile proponents at least. The language of software engineering is already close to sustainability – stakeholders, interaction, and system requirements – perhaps giving evidence to an extant systems approach.
Tate, K. (2006) dismisses buildings as metaphor for software development as they are largely static and have a clear finishing point. Instead he uses a coral reef metaphor for the software development industry since, like a coral reef, successful software “inhabits a complex and continually evolving ecosystem…” and “the development team needs to interact with and foster its ecosystem.”
A successful software product plays the role of the underlying coral in the reef. The coral is what makes the entire ecosystem possible. None of the other organisms can survive without it. …continually evolving, growing, and changing. The reef is incredibly complex yet also fragile and vulnerable, just as a software product’s ecosystem is prone to disruptive technologies or competition. This level of complexity, growth, constant change, evolution, and vulnerability I believe accurately portrays the complex world that today’s software products inhabit.
While many Agile references to sustainability derive from a goal of maintaining work pace (through small teams and 40 hour weeks) and long term survival, nevertheless the notion of being aware of the environment in which the industry exists, and the need to nurture that environment, are apparent. By definition, lean methodologies are easier on people, use fewer resources and consider the needs of the stakeholders at every stage of the development and beyond (Boehm, 2004).
Tate describes sustainable development as a pace that can be maintained indefinitely but
this does not mean slower development – quite the opposite
nor a lessening of rigour:
Sustainable development requires a singular focus on a form of technical excellence that regularly provides useful software to customers while keeping the cost of change low.
…able to deal with change, not be afraid of it or view it as a risk
Tate describes a mindset that the team is in it for the long haul as underlying sustainable development. The team adopts and fosters principles and practices that help them continually increase their efficiency, so that as the project gets larger and more complex and customer demands increase, the team can continue at the same pace while keeping quality high and sanity intact. They do this by continually minimising complexity, re-visting their plans, and paying attention to the health of their software and its ability to support change.
Key Points: ·
- Working Product at all times.
- Always be ready to ship what is there
- Build most important features first o Continual refinement
- Refactor agressively
- Write the best code you can
- Fix then code (not code then fix)
- Defect prevention
- Test Driven Development
- Test as you go ·
- Have high standards and hold all team members to them.
- Coding standards and guidelines
- Development Standards
- Build what the customer needs.
- Use UI Prototypes ·
- Zero tolerance for defects ·
- Replan often
- Continuous integration
- Don’t neglect performance ·
- Team Culture
- Leadership at all levels
- Visionary and Tactical Approach
- Be risk aware
- Continually improving and learning
before your team talks about development practices you ned to first focus on the principles you are going to follow. These principles should guide you every day in making tradeoffs and in fostering the right mindset and culture for your team and organisation.
too many people looking for the silver bullet… a “magic set of rules” we run into trouble, however, because we rarely recognise the role of complexity in the application of rules. Rules work best when the problem is simple but break down as complexity increases
Tate argues for a software culture that is
- Responsible (cf victim)
- Leadership (multiple leaders) optimal balance of visionary and tactical
- Shared sense of urgency
- Highly collaborative
- Complimentary talents and skills
- Continually improving and learning
So, is Sustainable Software truly sustainable? Yes, and no. It is clearly a vision of a culture that is informed by Sustainability. It does not, though, explicitly describe a culture that is considers the full scope of sustainability (An appreciation of importance of environmental, social, political and economic contexts…etc). One suspects though, that a workplace coming to grips with the ecosystem metaphor and following Tate’s advice would be more likely to see the bigger picture. Non-computing people could also learn from the vision of collaboration, creativity and determination described here.
Well done Mr Tate.