Normally, digital products are in a new, fast-moving market that changes frequently. That being said, the development process of digital products needs an approach that is flexible.
What is Agile?
Agile is “the art of iterative and incremental software development”. It is a type of project management process, where problems and solutions are evolving through the development process. It consists of a collection of principles that provide adaptability and flexibility.
Agile concept emerged around the end of the 90s to the beginning of the new millennium. In the 1990s, with the increasing of software needs, the industries realized that they couldn’t move fast enough to meet customer demands, it took about 3 years to develop a single software. At that time, softwares were released all-at-once, which means, the customer could not use the product until it was fully developed. Because it took an enormous time, by the time an actual application was finished, it was highly likely that the requirements defined at the beginning of the development, three years before released, had already changed and the software became outdated.
In 2001, a group of industry practitioners gathered up to discuss a new approach in software development. Although the aim of the discussion was to talk about effective development cycles, it was the beginning of Agile Methodology.
Every philosophy or concept must have a manifesto that consists of a declaration of values and principles that expresses its stance, views, and intentions, including Agile.
Agile Manifesto made up of four foundational values and 12 key principles.
Agile Manifesto Values
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Derived from these values, there are 12 principles in Agile Manifesto.
Agile Manifesto Principles.
- Customer satisfaction through early and continuous software delivery
- Accommodate changing requirements throughout the development process
- Frequent delivery of working software
- Collaboration between the business stakeholders and developers throughout the project
- Support, trust, and motivate the people involved
- Enable face-to-face interactions
- Working software is the primary measure of progress
- Agile processes to support a consistent development pace
- Attention to technical detail and design enhances agility
- Self-organizing teams encourage great architectures, requirements, and designs
- Regular reflections on how to become more effective
However, in my opinion, these principles and manifestos should not be ‘stiff’ because we can eliminate some of these points can be eliminated with the agile purpose still achieved.
Accommodate changing requirements throughout the development process
To some point, I agree that accommodation for changing requirements should be available throughout the development process, but only for minor things like the design of the button, etc. If we’re changing the core requirement like the business process of the application in the middle of the development, the software will less likely to be finished and the effort the development team has put in will be useless.
Enable face-to-face interactions
Face-to-face interaction is important to directly update the progress of each member's task. However, with the improvement of technology, the are many tools that were made specifically for scrum and agile processes. For example, there’s a bot in Slack messenger called standup-bot that will automatically ask each member of the group to give an update of their task.
Self-organizing teams encourage great architectures, requirements, and designs
A self-organizing team is a blessing for a collaborative project, but it does not necessarily mean it will encourage great architectures, requirements, and designs, it all still depends on the team member’s initial skill.
Collaboration between the business stakeholders and developers throughout the project
Not all client can accompany throughout the development process. If the client is busy, we can tackle this by settling the fixed requirement at the beginning of the project.
It depends if we over-simplify things, things will get even more complicated after some times, so the important thing is not simplicity but maintaining ✨standard✨.
To achieve these principles and values, organizations usually use several methods such as Scrum, Extreme Programming (XP), Crystal Methodology, Dynamic Software Development Method, etc.
In the software engineering project course, our team develop a web-based application for mobile named Raising Star. This application basically aimed to help parents in tracking their children’s development. We decided to use Agile to approach our project because the client wants to see every increment of the development of the product.
How our team using agile to develop our product
To implement Agile Methodology, we use Scrum Method.
What is Scrum?
Scrum is a framework that helps people, teams, and organizations generate value through adaptive solutions for complex problems. There are several actors in Scrum Framework:
- A Product Owner that orders the work for a complex problem into a Product Backlog.
- The Scrum Team turns a selection of the work into an Increment of value during a Sprint.
- The Scrum Master that responsible for ensuring Scrum is understood and enacted.
Organize the Backlog
This event is the responsibility of the product owner. It is basically a set of features and its expected outcome. In our project, it is manifested this way:
Every feature is put into a more detailed list called backlog, these backlogs are what we need to do in order to develop the feature.
This meeting is led by the scrum master and is where the team decides on the sprint goal. Specific use stories are then added to the sprint from the product backlog.
Our team usually has a 2 hours meeting for Sprint Planning. In Sprint Planning, we picked which features we want to develop and weighed each backlog. After that, we discuss the distribution of tasks.
A sprint is the actual time period when the scrum team works together to finish an increment. Each sprint in our team is 2 weeks. To ease the development process, we develop every user story and task in different branches.
Stand Up Meeting
This is a daily super-short meeting that happens at the same time (usually mornings) and place. We do our stand-up every Thursday and Sunday.
If you can’t do a standup meeting daily, make sure the gap between days is even.
This happens at the end of the sprint. The development team showcases the backlog items that are now ‘Done’ to stakeholders and teammates for feedback.
Usually, in Software Engineering Project Course, the Sprint Review is held in the class schedule every 2 weeks.
The retrospective is where the team comes together to document and discuss what worked and what didn’t work in a sprint, a project, people or relationships, tools, or even for certain ceremonies.
To develop software is to organize and understand the people. I think that the approach of Agile that puts interaction between team members first is a good approach.
Thank you for reading 😊