We embarked on a process of Agile software development more than three years ago. It was a challenging conversion in the early days, but today, we wonder at how we managed to operate without the Agile principles. These are set out in www.agilemanifesto.org the official Agile software development site which provides really useful tools for Agile practitioners. In a recent internal exercise we decided to review our success or failure in the implementation of the twelve core principles of Agile development.
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Getting the customer to understand that our software delivery is not a single upload, but in fact consists of a series of deliverables which need their feedback and input to complete is an on-going challenge. Clients like being involved in the process, but all too often have not spent enough time, or do not have the resources available, to define internal systems and procedures accurately enough. Its all the many exceptions to the rule that create the programming challenges and difficulties, and this needs a deep analysis of the different operating scenarios by the client.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
Change is the one variable that one is sure of whenever embarking on a software development or even a software customisation programme. Internally, our team of developers has risen to challenge and their positive can-do approach has been critical to the successful implementation of Agile within our organisation. The difficulty that we face all too often is for the client to realise the consequences of change. Everything is possible, but every change comes at a price. What may seem to the customer a simple addition of another variable, my mean a complete re-write of the core engine to deal with potential conflicts in data which may arise on the introduction of such a new variable. Costing such impacts to change, is difficult, so clients need grant some latitude in this.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
This is where we have been particularly fortunate in the level of support we have got from clients in their on-boarding of the frequent software updates as opposed to the single software implementation after a significant software development period. Customers see the benefit this affords them in being able to make changes as the system itself is developing, often being able to address conflicts and ambiguities that arise in the programming process but which were not adequately addressed in the planning period.
- Business people and developers must work together daily throughout the project.
Getting collaboration from clients and developers has proved to be a major success. Clients realise that ultimately they are the real beneficiaries of the collaboration, and our developers realise that without the client’s collaboration we cannot understand their requirements and deal with the many issues and concerns so often related to a software development or customisation project. To create the win-win environment that is critical to the successful development of long term collaboration, we modified our billing policy to ensure that we could offer clients reduced rates on those developments being finalised with their involvement and which we could then share with other clients.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
With or without Agile development, its all about people. You need to have positive, motivated and driven people in the team. Agile development puts pressure on getting people to work to the highest standards. It encourages people in the team to search for best practices and adopt them wherever suitable. This calls for confident developers who can work in a team and know how to share knowledge. This transfer of knowledge within the team is probably one of the key benefits of Agile development as it helps to create the environment where sharing and mutual collaboration to attain common goals is the norm. Good motivated people needs the right tools and they need the space to work. There needs to be a culture which encourages experimentation and rigorous on-going quality assurance as the safety net to protect customers’ interests.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
Face to face meetings are essential to build and nurture a culture of teamwork and collaboration. But, meetings need to be managed. They need to be carefully planned, scheduled at sensible times, and run efficiently to ensure that enough time is given to discussion, but control is kept to avoid discussions needless wandering out of subject. We found that mixing face-to-face physical meetings with the client at our offices or at the client’s premises was just as important as including video-conference face-to-face meetings with clients. Our approach is now that general discussions, or specific detailed discussions need to be carried out at the clients premises or at our offices, preferably the latter as we can ensure that there are less interruptions. On-going feedback, tweaking of issues, or discussion of minor points that may be holding up development, these can be dealt with very efficiently via video conferencing.
- Working software is the primary measure of progress.
This is the reason for our being. We need to deliver software solutions that add value to our clients. Each deliverable component adds value to the client. Whether it is an enhanced user interface, an improved computation routine, a more detailed internal data audit, or a general system security upgrade – all add value to the client. In reality, not all the deliverables are visible to the client, and some of the most important deliverables, such as those related to security, will not be noticed by the client. It is our responsibility to keep the client informed of what is being done on their behalf and what deliverables come on-stream.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
The aspect of sustainability is core to a commitment to Agile which facilitates on-going development and the leverage of knowledge to shorten the learning and implementation processes. Particularly from a client’s point of view, this aspect of Agile development is totally against the traditional tender system seeking the cheapest product. Clients need to be more discerning in their selection of service providers, focusing on long term collaborations that may not be the cheapest, but which add the most value to their organisation. The continued collaboration ensures that lessons learned in the past are not forgotten, but are implemented in the on-going developments. Continued collaboration builds on the positive experiences and shared achievements.
- Continuous attention to technical excellence and good design enhances agility.
This calls for a culture of on-going learning and development. Being a learning organisation is a source of competitive advantage, but it does not just happen. It calls for the selection of qualified and competent staff who realise that they best job security is their competence and expertise. Whilst management needs to see to the allocation of time and resources to ensure that the team is involved in on-going practice development, staff need to be prepared to invest in their own future and seek opportunities for continued learning and growth. We have found that the broad range of international on-line specialised training courses and resources provide a flexible and cost-effective platform on which to base such an approach.
- Simplicity–the art of maximizing the amount of work not done–is essential.
Its not easy to make things simple. In fact, bringing simplicity down the end-user often involves tremendous levels of sophistication and complexity at a design and programming stage. The reality is that today’s challenges are quite complex and often across different operational sectors of a firm, be they areas of administration, front-line or back-office support, finance, research and development etc. Creating simple interfaces that are intuitive to users and allow for easy learning and operations is a challenge when the tasks and operations involved could be so complicated with different variables coming into play at different levels of risk. The best applications are all too often those which the user finds so simple, so easy, so reliable to use. In such circumstances, users often do not realise the complexity of the underlying operations that the software or application performs.
- The best architectures, requirements, and designs emerge from self-organizing teams.
Design is critical at all stages of the software development and implementation process. Understanding the long term requirements of the solution are thus fundamental to allow for the use of the most appropriate architecture and within that architecture design and build-in functionality that adds value and meets the clients expectations. Design cannot be top-down. Developers involved in the client interaction also need to have their say in the design process. Their focus on the simple most effective interface to clients is essential. The objective is not the develop the most technically advanced solution, the objective is to harness the level of technology that is appropriate to provide the client with the set of deliverables required within the timeframes and budgets agreed upon.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behaviour accordingly.
Self-analysis and self-criticism are very good habits to develop. The team needs to learn how to criticise each other without being personal, how to identify project or sub-project failure early and use this as a learning experience to improve quality. The structured format of the Agile approach to software development provides time for the retrospective analysis. Yet making the most of this time calls for an open style of leadership which is ready to admit and fix its faults and a development team that is continually looking at opportunities to improve its performance. This never ending challenge for improvement is one of the most important legacies of the Agile approach because it focuses the attention of the team on the future, using the past as a reference for continued development.
In summary, our experience with Agile development has been very positive and a confirmation of the relevance and importance of the twelve principles to its successful implementation. As a customer-driven organisation that deals with on-going development and customisation of systems to meet the evolving demands of a discerning corporate clientele it is relevant to note that Agile development requires the collaboration of the client. Clients need to recognise the importance of leveraging technology to improve their services to their customers and they too need to commit resources to optimisation of developments.