Agile is a method of software development that came to prominence in the early years of this century. It is an iterative approach to development that breaks projects into small units that can be completed in short time frames. Agile became so popular that younger developers may not have experienced any other way of building software.
Agile is one of several competing software development methods that were intended to fix problems with the way software had been developed in companies since the 1950s. The waterfall method that dominated development in large businesses was a strictly linear and sequential process. It started with the gathering of requirements and progressed through design, implementation, verification, and maintenance. Sometimes there were more steps. Sometimes they had different names. But the basic outline is the same today.
What is Agile Development?
The waterfall method worked, but it caused lots of problems. The customer may not know what their real needs are until after their initial requirements are implemented. There can be months or years between gathering requirements and software delivery. As Charles R. Martin points out on The Overflow: "Requirements volatility is the core problem of software engineering."
Additionally, designers may not appreciate the implementation challenges developers face. Marketers may want features that weren't in the original requirements. The technology selected at the start of a project might be obsolete by the end. The sequential nature of the waterfall process makes evolution difficult and changes expensive.
Agile might be considered the anti-waterfall method of software development. Instead of sequential projects, agile is iterative. Instead of silos of expertise, agile brings customers, developers, designers, and project managers together. Agile developers expect requirements to change. Detailed planning is carried out throughout the development process, rather than at the beginning.
The key to agile development is iteration. During the initial planning phase, project managers break work into increments that are expected to take at around a month or six weeks to complete. During each cycle, sometimes called a sprint, there is additional planning, implementation, testing, and consultation with the customer. Stakeholders work in teams and are encouraged to talk to each other. Planning is flexible and plans can change during and between sprints.
At the end of each cycle, the working code is delivered to the customer, who provides feedback, which is taken into consideration for the next cycle. There is often a customer representative on the team, an individual who looks after the customer's interests and talks to both the customer and developers.
To summarize, agile development involves:
- Short development sprints that aim to produce useful code.
- Communication between stakeholders.
- Short feedback loops and continual evolution of requirements and goals.
Agile software development is not without trade-offs. It can be challenging to provide accurate estimates about how long a project will take. But agile is the preferred software development method of many businesses today.
How Does Continuous Integration Make Agile More Efficient?
One of the problems with agile development is that it can create a lot of extra work. The goal is to make sure that the software is deliverable at the end of each sprint. That means it has to be thoroughly tested throughout the sprint rather than once development is complete. Features have to be committed to the main development branch regularly, preferably without breaking it.
Under a waterfall system, there were usually dedicated testers whose job it was to make sure that everything worked as intended, that it matched the requirements. Under agile, the requirements are subject to change, and there's no time for thorough third-party testing between commits. Testers still play a vital role in software development, but developers are required to do a lot more testing than they used to.
The solution is automated testing and continuous integration (CI).
Continuous integration automates the testing and integration of code from multiple developers into a project. Ideally, developers commit code often. The more frequently code is committed, the easier it is to integrate because the fewer changes and conflicts there are. Infrequent commits cause issues that can seriously slow down development.
What Does Continuous Integration Software Do?
Continuous integration software monitors the code repository. When developers commit changes, the CI server checks out the software. It builds a testing environment, typically deploying a virtual server or container with the same environment as the software used in production.
Once the CI server has deployed the testing environment, it runs the build—compiles or otherwise prepares the software—installs the application, and runs tests. If the build or the tests fail, the CI sends alerts to the development team so they are aware that fixes are required.
If a developer has to build a testing environment, build the software, and run the tests every time they want to commit software, otherwise productive time is wasted. It discourages them from regularly committing, which further slows development. Developers are responsible for writing and running unit tests on the code they write. But integration testing is automated, ensuring that the main repository is always in an acceptable state.
Agile software development allows software projects to react to changes in technology and business requirements. It focuses on product quality and stakeholder engagement, rather than on a sequential process of software delivery.
Software such as version control and continuous integration platforms automate time-consuming tasks, making agile development more efficient, more productive, and more likely to result in high-quality software.
To talk to a server hosting expert about the best server to host your development pipeline, start a conversation in the chat window on this page or contact us by phone or email for a free initial consultation.
Complete Digital Server Solutions For All
A single tenant, physical server allowing you full access to its resources.
Virtualized server platform hosted on enterprise-grade physical servers.
High-performance and highly-available infrastructure, delivering a reliable, secure, and scalable solution.