Skills for Agile developers
The list included:
– Design patterns. These are the mentioned books: GOF and POSA series
– Design principles.
– Methods. The mentioned methods are „XP, Scrum, Lean, Kanban, Waterfall, Structured Analysis, and Structured Design”
– Disciplines: „TDD, Object-Oriented design, Structured Programming, Continuous Integration, and Pair Programming.”
– Artifacts: „UML, DFDs, Structure Petri Nets, State Transition Diagrams and Tables, flow charts, and decision tables.”
The next question is: what is the link between “the every software professional” mentioned above and the particular skills required from an agile developer. Considering the whole context of Martin’s work and also the content of the „The Clean Coder” book, this is one of the main possible conclusions: „The Coder”, the „software professional” considered here by the author is an Agile developer. The reason is quite simple: the process described by Martin in the book is an Agile process (this is the context).
For some of these skills the author offers details in the book, for others, he considers they should be obvious. Anyway, we will try to offer a motivation and to somehow rewrite this list of skills.
Motivation – keeping promises
The starting point of any discussion about an Agile process should be the „Agile Manifesto”. Parsing this text, we can extract some general required abilities of agile practitioners:
– Direct customer collaboration
– Creating good design and general technical excellence
– Multi-disciplinary skills
– Iterative development
Also a good agile process makes some promises „by contract”:
– Could „follow” the requests of the customer business, according to changes and needs of this business
– Could have a very good reaction response to these requests – ability to deal with often changes and ability to deal with late changes
– Good quality and good costs
We will not detail here the project and team management practices that instantiate these promises, because this is beyond of the scope of this article. However, the agile process shall have an iterative life-cycle that shall be adaptive as a first attribute. Important practical ideas about these practices could be found in some of the best known Agile methods: XP, Scrum and Disciplined Agile.
Our main question here is: which development related practices will allow us to keep the „agile promises” and which skills are associated with these practices?
Quick and correct reactions to changes and requests. Good quality. How can we ensure these process attributes? Which practices offer support for these aspects?
Let’s define some requirements for development in order to keep these promises.
– The code (implementation) shall be clean – in order to be easy to read , change and fix. . That it is also a foundation of „built-in” quality
– We will need a simple, but adaptive design – that means that beyond the „clean” attribute, we will need some design practices to provide the required flexibility: respect of the design principles, use of patterns (for architecture and design), TDD
Initially we will need to create a simple design (see Extreme Programming – XP) and later, following new requests, we will need to adapt this design: Refactoring [R-MF1] and re-design will be the necessary practices
– Quick responses, while retaining good quality, is a tough task. A very good practice in this context is the TDD – Test Driven Design [B-KB]. TDD will also provide more value to development, it will improve the design – that implicitly means the „built-in” quality – but will also increase the value of the quality control. Also, TDD is a fundamental support practice for refactoring and re-design, providing coverage for necessary regression tests.
– “Maximizing the amount of work not done”: that means structured work, recognizing the places where existing patterns could be applied, without re-inventing the wheel. But that will require also opportunistic use of these patterns, in order to make the design simpler and not fuzzier. Also required are general abstraction abilities, materialized also in visual modeling abilities. Remember that the most important Agile authors are in fact the best authors in software architecture, software design and modeling (UML based).
– General technical excellence is required (See also [B-MSC])
– Document what is essential– the agile documentation is rather light, but shall contain the most important information. To accomplish that, high skills will be required in order to understand the content: requirements, architecture and design. See more about agile documenting patterns in the work of Alistair Cockburn & collaborators [B-AC]
Reviewing the above mentioned practices and the associated skillset, there are at least two main conclusions: an agile developer shall have multi-disciplinary skills in order to play various development roles and also the required skills shall be rather high level skills.
Imagine – using a military domain metaphor – an agile team as a commando team rather as a regular army unit. High-skills, Multi-disciplinary abilities, roles inter-changes, pair work are default required attributes in this case.
A final viewpoint
Starting from Robert C. Martin’s list, I propose the following as fundamental skills of Agile developers (beyond work specific required skills):
– Development skills specific – programming styles per language
– Design skills basics– clean code. See: „Clean Code” by Robert C. Martin [B-RM2]
– Design skills fundamental– Design principles. Example: Principles of OOP , by Robert c. Martin [B-RM3]
– Design skills advanced– Design patterns & Architecture patterns: GOF , POSA series , PEEA [B-MF2]
– Agile Methods and related: XP, Scrum, Disciplined Agile, Lean, Kanban
– Development disciplines –ALL! That means – with agile way of work – Business Modeling, Requirements Management, Analysis & Design, Implementation, Testing, and the rest. Important: for Analysis & Design it is highly recommended OOAD Object – Oriented Analysis and Design
– Requirements Management: Effective Use Cases [B-AC], User Stories
– Modeling skills: Abstraction skills, UML, Database Diagrams, knowledge about modeling elements (flows, states, activities, object collaborations)
– Agile highly required practices: Refactoring , TDD, Pair Programming
– Agile scalingon development part: Unified Process knowledge. See also Agile Scaling Model , by Scott W. Ambler [B-SA]
Anyway, if we really want to have a bigger picture and a better understanding about the work and challenges of an agile developer I recommend reading the whole book „The Clean Coder” [B-RM1].
Valentin Tudor Mocanu – TSP(smartprojects.ro)