In today's rapidly changing business environment, where promoting digital transformation (DX) is a pressing need, system development methodologies also require speed and flexibility. This is where "agile development" is gaining attention. This article provides a clear explanation of agile development, from its basic meaning and characteristics to its differences from traditional waterfall development and the criteria for selecting the methodology.
INDEX
What is Agile Development?
Agile literally translates to "quick" or "nimble." In system and software development, it is used as a general term for development methodologies that continuously increase the value of software by repeatedly developing and improving it in short cycles.
Basic concepts of agile development
The defining characteristic of agile development is that, instead of building the entire system at once, it is divided into smaller functional units, and the development cycle of "planning, designing, implementing, and testing" is repeated in short intervals.
Rather than creating a perfect plan from the start, our approach is characterized by gradually completing a high-value system while incorporating customer feedback.
Differences from traditional waterfall development
To gain a deep understanding of agile development, it's crucial to know how it differs from the traditionally widely used "waterfall development" method.
Differences in development processes
Waterfall development is a linear process that progresses sequentially through the stages of "requirements definition → design → development → testing → release," much like water flowing from top to bottom. It cannot proceed to the next stage until the previous stage is completely finished, and in principle, rework is not anticipated.
On the other hand, agile development is an iterative and incremental process. Small features are completed in short periods of about 1 to 4 weeks (called sprints or iterations), and the value of the software is gradually built up by repeating this process to construct the entire system. Even if specification changes occur along the way, they can be flexibly incorporated in the next cycle.
Differences in suitable projects
Waterfall development is suitable for projects where requirements can be clearly defined from the start. For example, it is well-suited for large-scale projects with clear goals and low risk of specification changes, such as replacing a company's core systems.
In contrast, agile development is suitable for projects where the correct answer is not known from the start, or where the market is rapidly changing, such as new businesses, web services, and PoC projects that involve AI utilization, where features are improved while observing user feedback.
Criteria for deciding which to choose
The choice between the two methods depends on two key factors: the "uncertainty of the requirements" and the "tolerance for change."
The waterfall model is suitable when the requirements for the release are 100% defined and the top priority is to implement all of the predetermined scope (features).
On the other hand, if you want to keep the budget and schedule fixed, prioritize developing features with high business value, and flexibly adjust the scope, you should choose agile development.
In actual projects, however, there are cases where a combination of both approaches is used, such as proceeding systematically in the upstream phases while iteratively improving during the implementation and verification stages.
Characteristics of Agile Development
Agile development has unique characteristics that are not found in traditional methodologies.
Development is repeated in short cycles.
In agile development, a working software product is completed in a short period of time, typically within a few weeks. By repeating this process, the project's progress becomes more visible, preventing discrepancies in the final product's image among stakeholders.
Ability to adapt flexibly to change
Even if external environmental changes occur during development, such as "a competitor releasing a new feature" or "user needs changing," agile development allows you to rearrange priorities in the next cycle and incorporate them as new requirements.
Our strength lies in our ability to constantly adjust our course to maximize business value, rather than rigidly adhering to pre-planned strategies.
Continuous improvement within the team is a prerequisite.
Agile development involves close communication between the development team and the business side (customers and product owners).
Furthermore, after each cycle is completed, the team conducts a review to identify areas for improvement in the next cycle. A commitment to continuously updating the process itself is essential.
Five representative methods of agile development
Agile development is not the name of a single set of rules, but rather a collective term for a set of concepts. In practice, several frameworks (methods) that embody the philosophy of Agile are used.
While Macnica primarily has experience supporting projects using Scrum and Kanban, we will introduce a wide range of representative methodologies to help you understand the overall picture of Agile.
1. Scrum
Scrum is the most representative and widely used method within agile development. It's named after the rugby scrum, where the team works together as one to advance the development process.
Clear roles such as Product Owner, Scrum Master, and Developer are defined, and development is divided into fixed, short periods called "sprints" (usually 1-4 weeks).
A key feature of our approach is that we share progress and challenges in short daily meetings (daily scrums), fostering self-organization within the team as we develop our products.
2. Kanban
This methodology originates from the Toyota Production System (*) in manufacturing, applying the just-in-time principle of supplying "what is needed, when it is needed, and in the required quantity" to the software development field. In the 2000s, David Anderson systematized it for IT service management and software development, reinterpreting the Kanban concept, which visualizes the "flow of goods" in manufacturing, as a visualization of the flow of development tasks. It is particularly easy for those with a manufacturing background to understand, and is a methodology that easily serves as an entry point to Agile in a way that aligns with the realities of the workplace.
The goal is to visualize the status of tasks (such as "Not Started," "In Progress," and "Completed") on a board (Kanban) and limit the number of tasks in progress to identify bottlenecks in the development flow and improve work efficiency.
*See"Kanban System Supporting Toyota's Production Sites"by Toyota Systems (TS).
3. Extreme Programming(XP)
Extreme Programming (XP) is an agile methodology that emphasizes engineering practices, developed with the aim of improving software quality and responding quickly to change. Proposed by Kent Beck, it is characterized by combining practices such as "simple design," "continuous testing," "pair programming," "refactoring," and "continuous integration (CI)."
We emphasize continuously improving code quality within short development iterations, and we value technical excellence and simple design as key principles. While Scrum focuses on "managing the development process," XP focuses on "engineering practice itself," so it is not uncommon for both to be adopted in combination.
4. Lean Software Development
Lean (Lean Software Development) is the application of the "waste elimination" philosophy to software development.
Our goal is to eliminate all waste in the development process (such as creating unnecessary features, waiting times, and excessive documentation) and deliver only what is truly valuable to our customers as quickly as possible.
5. DSDM(Dynamic Systems Development Method)
DSDM (Dynamic Systems Development Method) is an agile framework that originated in the UK in the 1990s. Its main characteristic is the idea of "fixing deadlines and budgets, and adjusting the scope" (Box methodology), which allows for flexible development while prioritizing project schedule and budget.
It requires close collaboration between the business and development teams and has a proven track record of use in corporate projects with strictly defined release dates and in projects to modify existing systems. Although it has fewer adoption cases in Japan compared to Scrum and XP, it is recognized by the Agile Alliance as an agile development framework.
Advantages and disadvantages of agile development
When considering adopting agile development, it's essential to understand not only the advantages but also the disadvantages.
Benefits of Agile Development
The biggest advantage is the ability to "release early" to the market and customers. In agile development, you can quickly release only the core features (MVP: Minimum Viable Product) and refine it while gathering user feedback.
Therefore, this helps to avoid the risk of creating a system that does not meet customer or on-site needs (rework risk), and the waste caused by implementing features "just in case" that no one will use.
Furthermore, the ability to see what's actually working in short cycles is a major advantage for managers, as it prevents the progress from becoming a "black Box." This makes it easier to detect the risk of a "watermelon project" (a major disaster) early on and correct course.
Furthermore, by involving on-site personnel (such as product owners) and working together as a team, a system can be created where both parties collaborate towards the same goal. This eliminates the "walls" between the IT department and the field, leading to improved IT literacy and a stronger sense of unity within the organization. (However, it is essential to create a system that transcends departmental boundaries to ensure that busy field departments are committed to the project.)
Disadvantages of Agile Development
While agile development offers high flexibility, there is a risk that if requirements are not prioritized correctly, the business-essential features (MVP) may not be completed within the allotted timeframe.
To prevent this, strict backlog management is necessary, and decisions must be made continuously to determine "which features to cut instead." If the traditional mindset of "build everything within the initially agreed-upon budget" persists and the timeline is extended, it will ultimately lead to budget and schedule inflation. Therefore, it is essential to create a system where the client and the development team work together to focus on business value.
Furthermore, it's important to note that in development cycles with short development timelines, non-functional requirements such as performance, reliability, and security tend to be neglected. Especially in enterprise systems, it's necessary to continuously verify not only that the functionality works, but also the quality, security, and audit compliance.
Furthermore, minimizing documentation too much can make handover and maintenance difficult later on. In agile development, it's important to properly retain information necessary for operation and maintenance, rather than eliminating documentation altogether.
Suitability of adopting Agile development
Based on the characteristics discussed so far, let's summarize the cases in which agile development is suitable and unsuitable.
Corporate systems are broadly classified into three categories: "SoR (System of Record)," which handles core business operations; "SoE (System of Engagement)," which serves as a point of contact with customers and the field; and "SoI (System of Insight)," which utilizes data analysis and AI. Agile development is particularly well-suited to the SoE and SoI areas, which require adapting to change and continuous improvement. On the other hand, the SoR area, such as accounting, human resources, and production management, where stability and accuracy are paramount, tends to have more defined requirements and is more compatible with waterfall development.
Cases where agile development is suitable
- Launching new businesses and startup services
- Projects that involve repeated hypothesis testing and proof-of-concept (PoC) including the use of AI.
- Web service and app development that wants to continuously add features based on user feedback.
- System development in a highly competitive market where speed is essential.
- Systems in the SoE (System of Engagement) and SoI (System of Insight) domains are particularly well-suited for developing systems that require continuous improvement and expansion based on user feedback, such as customer-facing web services and applications, and data analysis and AI utilization platforms.
Cases where agile development is not suitable
- Systems where the requirements are clearly defined from the outset and there is little room for change (such as accounting systems in financial institutions).
- Projects that require a combination of iterative improvement, prior planning, and phased approval.
- Projects involving multiple organizations and vendors are intricately intertwined, making rigorous prior documentation, consensus building, and contractual procedures essential (although in recent years, large-scale agile methodologies such as SAFe are increasingly being adopted in this area).
Key points for successful agile development
This article explains the key points for successfully implementing agile development within your company.
Don't implement it all at once.
Suddenly changing the existing development culture will cause confusion on the ground. We recommend a small-scale start, beginning with a new project with a small impact or a trial within a specific team, and then expanding company-wide once you have gained successful experience.
Establish tools and processes.
To implement a speedy development cycle, it is essential to have communication tools (such as chat tools) and various tools such as task management and source code management systems in place.
Furthermore, by automating tests and building a CI/CD (Continuous Integration/Continuous Delivery) environment, you can increase development speed while maintaining quality.
Furthermore, in practice, it is crucial to achieve both development speed and security by adopting a "DevSecOps" approach, which incorporates not only build and deployment automation but also static analysis, dependency library verification, sensitive information detection, and infrastructure configuration checks into the CI/CD pipeline.
Habitual reflection and team autonomy
Agile is not just a development methodology; it's also a team "culture." Make it a habit to always conduct a retrospective after each sprint and frankly discuss what went well and what could be improved.
The key to success is fostering a "self-organizing team" where each team member thinks autonomously and takes action to improve, rather than simply waiting for instructions.
Let's deepen our understanding of agile development.
Agile development is a powerful development methodology for quickly delivering valuable products to users in a rapidly changing business environment. It is particularly effective in projects where it's difficult to foresee all requirements in the initial stages, such as AI or new services, where the agile approach of starting small and iterating through testing proves beneficial.
At Macnica, we leverage our extensive expertise in the AI/DX field to support our clients in developing systems and conducting Proof of Concepts (PoCs) to solve their business challenges. If you have concerns such as "We want to proceed with hypothesis testing for new businesses using an agile approach" or "We are unsure about how to proceed with AI/DX projects," please feel free to contact Macnica.