How Software Development Has Changed - The Agile Methodology
Software development has changed during the years. It used to be perceived as a bunch of software developers sitting in a small dark room and coding. Presently, the IT is spread across all the industries and it needed to be adapted for the current needs. Because of that, several approaches of the software development were proposed during the years.
One of the approaches (and in my opinion the most complete one) is the Agile methodology.
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- Individuals and Interactions over processes and tools
- Working Software over comprehensive documentation
- Customer Collaboration over contract negotiation
- Responding to Change over following a plan
The Meaning of Agile Manifesto
What is the message coming from those four points?
Basically, they say that practice is better than a stiff plan and tools. A very important factor in Agile is the team and interactions — tools and processes are replaced for more human-to-human approach.
Another important aspect is that working software is much more convincing for the client than a comprehensive documentation (although, in many cases, documentation can be crucial, as well). Clients are most likely pleased when they see a part of working software itself instead of tonnes of papers trying to convince them that software is working.
Clients themselves should also be treated differently. We should think of them more like of partners we are collaborating with, not just like a necessary part of the contract negotiations. Such an approach will result in more natural, human relations that bonds people and soothes the process of delivering any kind of news — good or bad.
The last, but not least rule of this framework is speaking for itself — just be agile!
Being agile means responding to changes sensibly instead of following a plan blindly. Plans change, some issues and blockers might appear, we cannot just follow a plan, we need to adapt to the natural process.
The creators of Agile Manifesto made also a list of agile development principles.
Getting familiar with the following principles is a great way to explore and understand the matter of agility. I see the principles as a guideline for a personal interpretation. Following this thought, it is a good opportunity for me to show you how I understand them:
1. Customer satisfaction by early and continuous delivery of valuable software.
The first point is already a beefy one! Customer satisfaction should always be an important goal for a responsible and professional company. This point is speaking for itself — provide your client with a continuous delivery of valuable software.
What do customers expect from a software company? Good-quality software!
Continuous delivery is significant for the cultivation of client’s interest in what they want and need the most — working software.
If you can show small parts of the growing system systematically, your work progress is clear for your client. From the customer perspective, it is nice to see bit after bit, until the small parts will became a whole.
2. Welcome changing requirements, even in late development.
Everything’s changing. That’s the old rule of the world. The same can be applied to software. Market can change, customers can change theirs business plans, team can break up, some new technology might appear… Also, developers might find out better ways to implement various components and ideas.
Beware! Agile methodology makes requirements flexible. And therefore, it’s common that during implementation, that the requirements adapt to the process itself.
3. Deliver working software frequently (weeks rather than months).
In a way, this point also refers to the point number one and two. Delivering every once in a short while (every week, every two weeks) is crucial in the Agile development. Clients would see changes more often which can change some of their requirements while delivering, before starting development of another feature.
4. Close, daily cooperation between business people and developers.
From my experience, this is nothing more than a daily routine for the Agile Team. As a Product Owner, I am a bridge connecting developers and entrepreneurs (This role is directly related to Scrum, which is one of the Agile methodologies. I will tell more about this in later articles).
The presence of such a connector enables the company to communicate every single day with business partners to plan future releases, define scope, and discuss ideas.
Together, we combine the business and tech worlds to make the product as valuable for customers as possible
5. Projects are built around motivated individuals, who should be trusted.
It’s extremely important to understand and to keep in mind that every team is build from people and that each of them is a unique individual
The key is to highlight the strengths and to locate weaknesses of each team member. It’s an effective way to stimulate the team’s motivation and willingness to learn. A highly motivated team is much more productive than the 8-to-4 “factory workers”.
Such an approach develops team’s loyalty and deep, mutual trust. The sense of being trusted gives the team members space to work and reduces stress.
I am glad that I manage a team of smart, self-organised people that I can be 100% sure are doing their absolute best.
6. Face-to-face conversation is the best form of communication (co-location).
That’s true. Very often, even complicated problems can be solved out after a 10-minute live meeting. Moreover, live conversations improve both in-house and external cooperation, and interpersonal relationships. In the company, we do have a lot of face-to-face meetings which, in my opinion, are much more effective than chatting on a messenger.
In this industry, it’s common to have clients not only from different cities, but also from different countries. The most of company meetings take the form of video conferences. No matter what people say — nothing can replace a handshake and having a cup of coffee at one table. To maintain healthy and actually friendly relationships with clients, it’s important to visit each other every once in a while if possible.
After all, we are all human beings trying to do our best!
7. Working software is the primary measure of progress.
How to measure the progress of a working software? By the amount of the working software itself! It may sound ridiculous, but it is true. What does it mean exactly? Not working software yet is still just a plan. And plans are not always accurate. A lot of problems might happen during the implementation. Just add the possibility of scope changes and you can see it yourself!
8. Sustainable development, able to maintain a constant pace.
This point might be more difficult to achieve. And so, here appears an opportunity to mention Scrum — one of the Agile frameworks. Scrum forces you to keep the development sustainable thanks to the iterative way of delivery. Thanks to such regulations, we are able to maintain a steady delivery rate. Sprints require more or less of the same effort every two weeks. Developers can easily divide their time between coding, meetings, and self-improvement.
9. Continuous attention to technical excellence and good design.
Keeping in mind and executing these aspects are the team’s job and require its motivation. A motivated and experienced team will be more likely to keep the attention to the technical excellence. A good design is a slightly different story — you can have the best developers in the team and still produce a bad product because of weak design. Those two points should be equally maintained in the best possible manner. The workarounds and ad-hoc added functionalities will not end up well!
10. Simplicity — the art of maximising the amount of work not done is essential.
The simplicity principle is one of my favourites. Why should we work on something putting into it a huge effort if we can handle this in a simple way? This approach is becoming very popular in every part of the industry. Let’s take a closer look at, e.g., designs. Now, the most popular designs are the simplest ones! The same goes for software. No one would like to overpay for overcomplicated functions. As a user, you just want to log in and use the software readily. Keep it as simple and intuitive as possible!
11. Best architectures, requirements, and designs emerge from self-organising teams.
Probably, you can be understand this principle in a couple of ways. In my opinion, self-organised teams are more devoted to their job and focused on delivering a good product more firmly. Normally, if someone received an order, they would just execute it ASAP. Now, here is the difference! Give the people more freedom and they will be eager to discuss more constructively — that will result in original, thoroughly-discussed and thought-out ideas. Of course, total, anarchy-like freedom might easily go in a totally opposite way, where people are not able to work properly and efficiently. The tricky part here is to find a healthy balance and act on a wrong behaviour right away. Team spirit and improvement-focused attitude is an extremely significant factor of a good self-organised team.
12. Regularly, the team reflects on how to become more effective, and adjusts accordingly.
After many iterations, we found our optimal capacity of each iteration period. We already know how much we are able to deliver each sprint, which makes my job easier. Thanks to that, I am able to plan future work more accurately and I am not promising something that is impossible or extremely difficult to meet a deadline. I also decreased the stress level in our team previously created by postponing topics or last-minute deliveries.
To sum it all up, Agile is a much more contact-oriented software development. This approach allows us to deliver more frequently with openness to often improvements and adjustments. Modern software developers should be ready and willing to adapt to new changes, discuss with clients better — more openly and carefully, as well as with managers and other stakeholders.
I am not an Agile coach, I just work within this framework and the article is based on my and the team’s experience. I find it natural that each Agile team works differently and have different ideas for Agile work plans, and that others will construct their own framework using just a little inspiration of the Agile Manifesto.
However, I find the Agile Method unbelievably effective and very… human. Clear and honest communication is always the key of healthy relationships — also in the business world!