Our Agile Process
Various methodologies can be used to structure, plan, and control the process of creating a software application - waterfall, iterative, spiral, and others. Our methodology of choice is agile because it is the fastest, most reliable way of delivering what a client needs on time and within budget.
What Is Agile?
In an agile process the work is broken into small increments called iterations - short "timeboxes" of typically one week. This incremental approach lets the project adapt to changes quickly, and is ideal in situations where the precise system features are unclear at the outset. In our experience, this is true for the vast majority of software development projects!
Agile relies on defining system features as “user stories” - usable bits of functionality. User stories are created during discovery and they take the form:
"As a [role], I need to [feature], so I can [expected benefit]."
Each iteration consists of planning, design, coding, and testing of a set of user stories, and at the end of each iteration a working product is demonstrated to stakeholders. We try to begin with the most basic definition of a feature, and if improvement is needed more stories are added.
Teamwork and frequent communication between developers and clients is a characteristic of agile methodologies. Developers and clients jointly decide how to bundle the user stories into iterations based on their priority and difficulty. This allows our team to address the highest priorities and biggest risks early, while offering subsequent opportunities to modify the plan in response to new information. Rather than try to freeze a plan and schedule, we work in a manner that encourages dialog and shifts focus to what is most important at each point in the project. This allows our clients to review priorities frequently and adjust course if needed.
Why Agile?
Software projects can have only 2 of the following 3 characteristics: delivered on time, delivered on budget, and delivered according to specifications. Agile projects fix budget and time and allow specifications to evolve. At the outset of a project, we don’t know what features will work well for users, and we have only a rough idea of what will be hard or easy to develop. After a few iterations we have a much clearer idea. Agile methodologies allow projects to take advantage of this learning curve and adapt as they go along.
We think the following quote from the book The Art of Agile Development, by James Shore and Shane Warden (O’Reilly) nicely summarizes this point.
"The beginning of every software project is when you know the least about what will make the software valuable. You might know a lot about its value, but you will always know more after you talk with stakeholders, show them demos, and conduct actual releases. As you continue, you will discover that some of your initial opinions about value were incorrect. No plan is perfect, but if you change your plan to reflect what you’ve learned - if you adapt - you create more value."