TechJournal South
Header

Best practices for adaptive software teams

September 1st, 2010

Adam Monago

Adam Monago

By Adam Monago, Vice President of Client Services at ThoughtWorks Studios

Software teams, in the broader sense, are complex adaptive systems.  They live within organizations populated by many actors, influenced by the methods, practices and behaviors that coexist with them.  Most of all, they have the capability to learn and adapt to each new entrant into their world.  It is for this reason that, we tend to avoid recommending ‘best practices’ that all software teams can follow for success, let alone ‘agility’.

There are practices that when employed together can promote beneficial behaviors or expose harmful ones in the surrounding environment.  For example, the use of continuous integration can on a basic level expose unintended defects in the boundary points of two pieces of software.  At a more significant level, this practice can be used to influence the behavior of software developers to increase perceived ownership of the solution and to reduce tolerance for less-disciplined colleagues working within the code base.

Continuous integration is but one part of a more effective system of activities, practices and behaviors that many describe as continuousdeploymen t.  In this system, software is designed, developed, tested and deployed rapidly and regularly, often daily, if not multiple times a day.

What makes this so complex is that it involves a change in mindset across many roles on the team.  In order to deploy continuously, teams must conceive of the smallest possible features and implement them without gold-plating.   Breaking this approach down further, it deals with keeping batches of work small enough that defects are easier to find and fix, and process issues can also be sorted out quickly. The philosophies powering this approach are drawn from lean manufacturing; the overarching pursuit being the elimination of Muda, or waste – wasted features, wasted software, and wasted money.

At the core of both of these approaches is testing.  Arguably, testing is the single most important activity for development teams to undertake. There are successful teams that employ very sophisticated arrays of automated tests, and some that are successful doing it manually.  The degree of automation necessary is typically correlated to the scale of the system being developed. What is more important is how closely the testing activities reflect the expectations of the customers and end-users of the software.  It is from this, that so many other ‘best practices’ are derived.

At ThoughtWorks Studios, we have defined our ideal state as being one of continuous delivery: one in which the customers and users of software have maximum ownership and influence of the development process.

This system involves discipline by all actors in the system, from the leadership that provides the trust and guidance to software teams, to the teams that regularly fulfill the changing needs of their customers.  There is no recipe for teams to follow to meet this goal, but there is the willingness to observe, adapt and respond to the change that meets them.

 

Southeast Venture Conference, February 29 – March 1, 2012 at the Ritz Carlton in Tysons Corner, VA – Where Smart Money Meets Smart People.
www.seventure.org

© 2010, TechJournal South. All rights reserved.

Tags: , , , ,

One Response to “Best practices for adaptive software teams”

  1. MikeCI says:

    Continuous Integration is great for agile teams. We’ve noticed on MikeCI our hosted CI platform that many of the users consist of small groups who need CI to check their code but don’t have the resources to set up their own CI server.

    SaaS providers are giving small dev groups the opportunity to benefit from enterprise services in relation to quality for a low cost and competitive price.