Using Agile Software Development to Build Modern Software
How to Collaboratively Develop Software
Agile software development is an iterative approach to software delivery that focuses on collaboration and continuous releases. Rather than working towards one big go-live at the end of the development process, the team works to deliver incremental value. Team members continually evaluate requirements, plans and outcomes, enabling them to respond quickly to change. This provides a more dynamic alternative to the longer, sequential release cycles associated with the waterfall development model. In fact in our years as a software developers we have come to believe it is the only way to confidently build good software. When working with our customers we tend to default to agile methodologies.
Why have we preferred agile. Well, the agile approach values individuals and interactions over processes and tools, a functional product over comprehensive documentation, ongoing collaboration over contract negotiation and adaptability over adherence to a set plan. And this is not to say that we do not leverage tools or document accordingly. Agile enables us as programmers to more and accurately and succinctly document process. Agile methods focus on tight feedback cycles and continuous improvement.
Why Agile Development Matters
Using these methods offers a number of advantages for both software developers and clients. From the very beginning, the process is user-focused. One of the first development tasks is to identify who will use the product, which features they want and why. The answers to these questions are documented in user stories. Then, features are designed to meet the needs expressed by the users.
The client has visibility and input throughout the development process. Client stakeholders prioritize features based on their business needs, and these priorities shape the delivery schedule. Work is planned in tight iterations, typically 1-2 weeks in length. We have found that these short release cycles are a great match for the quicker speed and innovative delivery approach of cloud development projects.
Because planning, design and feedback occur throughout the project, communication and collaboration are ongoing priorities. Everyone involved in the project has visibility into what is currently being worked on and what is coming next. Frequent communication provides transparency that is especially beneficial to distributed companies.
The continuous delivery cycle ships new features frequently and predictably. Each feature delivered adds incremental value to the product, so the product grows and evolves with each new release. This method of developing in short iterations offers flexibility. Often, business needs change or new opportunities arise during development. The delivery schedule can shift to accommodate these changing needs. New user stories can be added or features reprioritized to reflect what is most important in the moment.
Frequent, manageable builds also allow for a greater focus on quality. Testing is continuous, so developers can identify and fix bugs more quickly. End users provide feedback on each release, so if a feature does not fully meet the client’s needs, changes simply can be delivered in the next iteration.
Is Waterfall better?
This flexible, iterative approach contrasts with traditional software development methods. Traditional software development occurs in distinct stages: requirements, design, development, testing and maintenance. Each stage must be completed before proceeding to the next; this traditional approach is called a “waterfall.”
Waterfall methodology works towards a single, massive deployment at the end of the process. First, a dedicated team gathers and documents all of the potential requirements. The project specs must be clearly defined before the product can be designed. The full product is then designed in one phase. A multitude of decisions have to be made before software developers even begin coding.
This methodology was developed when updating software was expensive. Because all the planning is performed upfront, it would avoid the costs involved with altering the established plans later. That also means that this traditional approach is not adaptable to changing business needs or unanticipated challenges.
Agile is better
The agile process, however, takes into account the modern cost of creating and updating software, adding adaptability to software delivery. Each iteration provides a new opportunity to update or expand the product. Change requests can be delivered quickly and inexpensively. For example, the design of a cloud development project can be updated if the team discovers a more efficient workflow.
Because testing occurs with each iteration, the agile approach minimizes risk. By contrast, waterfall projects have inherent technical risks: Products are not tested until they are fully developed. If earlier stages take longer than anticipated – as they often do – testing may be cut short to save time or money – which never really happens. Alas, problems made early on in the development process likely will not be discovered until the product is in testing, further wasting time and development budget.
In addition to relying on linear development stages, waterfall also delineates distinct working groups. The project management team defines the requirements and then passes the project off to the design team, and so on. This division hinders communication and reduces visibility into other workstreams’ progress. The agile approach uses cross-functional teams to ensure collaboration and intercommunication throughout the project. Agile enabled the advent of cloud development and of course DevOps. Today in some interview practices many large technology companies have new recruits write and push small bits of code to test candidates ability to code and work within an agile framework.
Ideal for remote development
Some organizations assume that software development teams need be co-located in order to work collaboratively on a daily basis. However, advances in technology enable even highly distributed companies to work cross-functionally to develop software products. A distributed or remote development team using a flexible approach can offer many benefits to clients.
Video conferencing facilitates interactive discussions while eliminating travel time and costs. Video calls and shared calendars simplify the logistics of bringing participants in distributed companies together. These virtual meetings are tailor-made for the agile communication process, since they are not limited to only those individuals who can meet in one physical location. The conversations can be easily documented and shared via video and chat recordings to keep stakeholders apprised of progress.
Moreso collaboration can continue beyond formal meetings via the many emerging communication tools such as Slack, HipChat (now Stride), Glip and many others. Developers and teams working remote have instant connectivity with everyone on their team and can identify who is available and who is not. Beyond email these services create a running synchronous dialogue for all users. When a call is necessary these tools can create instant conference rooms with everyone on camera and works to bring remote teams even closer together.
A remote development team can collaborate internally to code more efficiently. Utilizing software developers in different geographic locations provides extended availability across time zones; differing working hours increases response times while minimizing burnout risk for the team. At Azumo we leverage these tools to communicate with each other and invite our clients into these spaces everyday.
Of the three frameworks created for agile development, Scrum is the most regimented. While not a rigid development process, it does follow a specific set of activities and ceremonies. Scrum was founded on empirical process control theory, with transparency, inspection, and adaptation as its core principles. The main objectives of this framework are to enhance predictability and control risk.
A Scrum project begins with creating the product vision. The project lead drafts this artifact with input from client stakeholders and end users. The product vision is then used to create a product backlog, which is a prioritized list of features to develop.
The development team uses the product backlog to plan short iterations termed “sprints.” During sprint planning sessions, the team reviews the work in the product backlog and creates a sprint backlog with the features that will be deployed in the upcoming iteration. They then collectively discuss plans to implement those features.
During each timeboxed sprint (typically a period of 1-4 weeks) the team works to complete that sprint’s backlog. They hold short daily meetings called “standups” or “daily scrums” to give progress updates and organize work. One person on the team serves as the designated facilitator, or “ScrumMaster.” The ScrumMaster works with other team members to address challenges and ensures progress is being made.
Once the sprint backlog has been completed, the project team demos their work at a sprint review meeting. The features are then deployed to end users. Each sprint ends with a sprint retrospective meeting to discuss what went well and what can be improved. This sprint process cycles as many times as necessary in order to deliver a finished product.
Kanban is a framework that focuses on continual delivery while carefully managing the team’s workload. It originated in automotive manufacturing and is rooted in Lean and Just-in-Time principles. The word “kanban” means “visual cue” in Japanese. The core component of this framework is a visualized workflow called a Kanban board.
The Kanban board breaks work down into small pieces and organizes these tasks according to their current status. The main purpose of visually representing tasks in this manner is to allow team members to more easily track their work. Sharing a project’s Kanban board is an efficient way to communicate status updates to stakeholders in distributed companies.
Utilizing this framework enables teams to focus on the current tasks and better manage their workflow. Teams limit Work-in-Process (WIP) so software developers can focus solely on current tasks. Effectively managing their workload enables Kanban teams to set realistic timelines, reduce waste and increase value delivered to the client.
Extreme Programming (XP) is a framework founded in engineering principles. Its focus is optimizing the development process to deliver high-quality software. This framework contains the most specific guidance on best practices for development, based on XP’s five core values: communication, simplicity, feedback, courage and respect.
Teams using this framework work very collaboratively in short development cycles. XP teams form around a business representative known as “The Customer.” Team members work together daily as part of a “whole team” approach. Typically, two software developers will work on the same code at once, a practice called pair programming. While this level of collaboration may be difficult for remote development teams or distributed companies to fully implement, its values can guide teams in developing their own practices to work more efficiently.
Software developers are not limited to working within a single framework. Elements from multiple frameworks can be combined to create a unique approach. For example, a team may use Scrum planning, visualize their work on a Kanban board and utilize XP’s whole-team approach. Components can be mixed and matched to fit the team or project.
How Agile saves you money
Your business changes every day, so the best solutions are those that can grow and evolve with it. A flexible development process enables software developers to create more cost-effective, dependable products.
Faster, more frequent development cycles reduce change costs, waste and redundancy. Because projects cycle through each phase multiple times, small corrections can be implemented without disrupting the development process. Frequent testing and feedback cycles enable software developers to identify bugs and other defects more quickly, decreasing development time.
Cloud development further facilitates change by providing a nearly unlimited number of servers for testing and staging. Increased server availability helps teams work more efficiently. By using an iterative development approach and cloud servers, changes cost less and can be completed faster. Continuously implementing bug fixes and updates prevents expensive overhauls and delivers more reliable and cost-effective products.
This development approach produces software that is more user-focused. The product team works proactively with client stakeholders to identify changes in business needs and new market insights that can be incorporated in future releases. Every step that clarifies a challenge or validates a solution makes the product better. The end goal is to deliver a solution that is successful in the market.
Tools to use
Because the methodology produces superior results, many companies have created tools to make it easier to follow. Here are a few of the most popular:
Jira Software, by Atlassian, supports all of the project management methodologies mentioned above. It comprises a single tool that allows you to plan, track and manage all your cloud development projects.
Visual Studio, by Microsoft, includes tools to help you run your team. These include Kanban boards, backlogs, dashboards and Scrum boards.
The distributed nature of Git makes it a perfect fit for agile development. While it was not built specifically for agile, its lack of a central depository makes it ideal for remote development, allowing you to use best practices in cloud development to release and scale solutions quickly.
HP has created Agile Manager to help organize and guide teams through the process from start to finish. The tool gathers information from other tools in order to present project progress to all stakeholders.
Know What You Need?
Great! Our focus is on working with you no matter where you are in the journey to build intelligent software. Connect with us and lets discuss the details of your project.