The
principals of agile software development are well
documented and
extensive. On the ground, day to day, what does it mean for a group of engineers?
I think there are two simple attributes that really matter:
- Clear short term focus on adding value
- Willingness and capability to change focus
The
clear short term focus on adding value is well understood. It follows from a good user(customer) story that breaks down into tasks. The focus is collectively and iteratively on design, implementation, testing and documentation to make the customer requirement a valuable reality, adapting to requirements changes as necessary. The appreciation of
value as perceived by the end user rather than the engineer is also important.
The
willingness and capability to change focus is a little more subtle. Willingness is important, without it there is no hope of agility, but more important is the
capability to change. The capability must be learned because it is embedded in the context of the team and workplace. Consistency is key I think. Consistency in engineering practices across teams around things like build systems, code style, development and design tools. Consistency and simplicity allows individual developers to change focus because the underlying infrastructure does not change (too much). With consistency, moving from one task to another or from one team to another is not only possible, it is fun.
I understand that rigid restrictions are often considered the antithesis of creativity but they have their place and can be beneficial. Consider:
- Constraints often provide the motivation for innovation.
- Discipline predicates habit, habits allow our conscious mind to focus more freely on the task at hand.