What would be a simple way to explain Extreme Programming, Agile Software Development and Software Craftsmanship concepts to someone who’s hearing those for the first time? What does each one represent? What are they here for?
Over the last half year I’ve become conscious of the importance to have an understanding of their origins, their relation and their purpose. Everyone agrees on the high level, but when it comes to the details there is often some debate.
I’ll try and explain the basics of each as I see them.
Extreme Programming Explained, a book by Kent Beck was originally published in October 1999. This book was a result of his work as a project leader in the C3 project which he became in March 1996. Over this period, he refined the development methodology used in the project together with Ward Cunningham and Ron Jeffries and later described it in the book.
Agile Software Development is a set of software development methods and it promotes a series of principles in the field. In the 90s some software methodologies were evolving, like Crystal Clear (Alistair Cockburn), Feature-Driven Development (Jeff De Luca) and Extreme Programming (Kent Beck). In February 2001 seventeen software developers met to discuss such development methods and published the Manifesto for Agile Software Development.
Software Craftsmanship is a movement that emphasizes the skills of the developers, individualism, professionalism, pragmatism, perpetual learning and passion in programming. Its origins are rather abstract as there have always been software craftsmen, but it didn’t have a name back then. The Pragmatic Programmer book (by Andrew Hunt and David Thomas) published in October 1999 and the Software Craftsmanship book (by Pete McBreen) published in September 2001 are at the root of it. However, it gained more popularity around 2008 and in March 2009 the Manifesto for Software Craftsmanship was presented, expanding on the Manifesto for Agile Software Development.
Extreme Programming (XP) is a software development methodology, and one of the first agile methods. Even though the book was published before the Manifesto for Agile Software Development, the values and practices it promotes are in accordance with the principles of the Manifesto. After an Agile transformation boom, the Software Development part of Agile was forgotten by a lot of companies embracing it as they were adapting only the processes and tools. The Software Craftsmanship movement came as a way to grab again the lost Software Development part, to remember the technical side and promote it.
Extreme Programming (XP)
The most important things in XP are the Values and the Practices. XP promotes 5 Values which I’ll briefly try to explain.
Simplicity: The easiest to understand, the hardest to achieve. Keeping things as simple as we can is no simple task, but we should aim for it. Doing only what we are asked to do and no more will minimize costs and is a way of achieving simplicity.
Communication: There should be communication between team members, not only between developers, but everyone involved in the project.
Feedback: Obtaining quick feedback is key to adapting to change. Working in small increments and checking feedback will take us on the right path.
Respect: Everyone is on the same level, everyone is part of the team. The role of every team member is respected and the responsibility and authority for the different parts corresponds to the ones working in it, always staying in harmony with the full team and the project.
Courage: We always tell the truth, especially about progress and estimates. If we have to say no, if we cannot make it before the deadline, it’s our responsibility to say so. Expressing your opposite opinion is important while you keep proposing other options.
There are a lot of practices, explaining each one goes beyond the scope of this post, but I’ll mention the ones I believe to be the most important.
- Test Driven Development
- Pair Programming
- Simple Design
- Collective Ownership
- Continuous Integration
- Small Releases
Agile Software Development
Being a set of software development methods, the principles written in the Manifesto are pretty high-level. The considered agile methods respect and implement those principles, I’ve already introduced XP, which is one of them and there are quite a lot of other ones.
Agile is usually misunderstood as the ability in adapting to change, but that’s just one point to it. Focusing on adapting the software instead of trying to predict the future, breaking changes in small parts and working it up in iterations, plus letting quality code to be the documentation as this last one gets deprecated over time, while the code will always tell the truth, are between the basics. Among other agile software development methods we have:
- Feature-Driven Development
There is not a written definition Software Craftsmanship that offers a clear explanation on what it exactly is, so I’ll try to get some help from the Manifesto.
Not only working software, but also well-crafted software. Striving to achieve well-crafted software, but by no means “beautiful” code. Programming is seen as a craft, where you build something useful, beautiful details to it are just decoration and are not increasing actual value at least in software. To get this, code should always be kept clean.
Not only responding to change, but also steadily adding value. Adding new features should take the same time as it took back at the beginning of the project. Again, the code base is responsible for this to be achievable.
Not only individuals and interactions, but also a community of professionals. Learning and sharing what we learn, practicing together, inside and outside the company.
Not only customer collaboration, but also productive partnerships. Not an employer and employee relationship, but a partnership where both have benefits.
The attitude of a Software Craftsman is pretty important. Professionalism is the key word to define a craftsman, they own their career, learn and practice at home alone or in community and will apply what they learn at work, but most importantly, they are passionate about software development.
As Sandro Mancuso says, Software Craftsmanship is a long journey to mastery, a mastery we will never achieve but are willing to pursue over the journey.
Sandro Mancuso’s talk about Software Craftsmanship at CAS 2014
Sandro Mancuso’s book The Software Craftsman
Kent Beck’s book Extreme Programming Explained
Martin Fowler’s article on Extreme Programming
Manifesto for Agile Software Development
Manifesto for Software Craftsmanship
Wikipedia for Extreme Programming, Agile Software Development and Software Craftsmanship