Welcome to an introduction to Agile Planning: From Ideas to Story Cards. As you are getting started in software development, you may have heard the term "Agile" bandied about. It can mean a lot of things to a lot of different people, but for now understand that Agile is a way to describe certain processes developed to deal with the problems that come about when developing software.
In this book we focus only on a small part of Agile Development, and that part is the planning process.
Have you ever had the experience of starting a project only to be overwhelmed by the complexity? You may have some great ideas, but the more you think about them, the more details and questions arise. It can become difficult to start, or seem like so much work. Agile planning is designed to deal with just such problems (and many others.)
Software is one of the most powerful forces in the world today. With software we are able to instruct machines to carry out complex but mundane tasks, connect us socially across the globe, deliver rich media experiences, and discover solutions to the problems that plague our society.
Software's power lies in its flexibility and relatively low cost of production. Our ability to modify and improve a work product in real time leads to rapid improvements and innovations.
Consider the common calculator. A basic calculator is composed of a circuit board, components, a case, and a manual. The case is typically made through injection molding, requiring a large, expensive metal form to be constructed. The circuit board is printed in large quantities and the components are soldered on the board, sometimes by hand. The manual is written and printed on a large, specifically set up press.
To change the design of this calculator, add functions, buttons, or updates, significant money would need to be invested in updating the tooling, and that would only make sense if the sales would offset the investments. The chance for risky innovation or experiments would be quite low.
Now consider the calculator application on your mobile phone. To change the user interface design might require a single developer minutes. Adding a feature per the users' request might only take a few hours. Updates can be pushed directly to the phone. The manual is automatically generated and found online. We might only send a percentage of the users a wacky new feature and see if they like it or not. We can adapt very easily and the cost of experimentation is low.
While software is powerful, the very characteristics that make it so helpful can make it enormously difficult to produce. There is significant work that goes on "behind the scenes," that which is not readily apparent to the end user. It is hard to assess the quality of work along the way. It is difficult to communicate the design and customer intention throughout the organization. It can be hard to coordinate the efforts of a team to reach the same goal.
Furthermore, the flexibility of software means your toolkit is always improving and changing. Old techniques and design patterns may fall out of favor, be replaced, or upgraded. Software must continually be considered with any eye toward future compatibility.
Software, like anything that is built, can be built with varying levels of quality and craftsmanship. Software can still work but be prone to failure and breakdown. It can become hard to change or update, and if plans and requirements change along the way (they always will!) it can be hard for existing software to adapt.
As software has become an increasingly central component of our economy several processes and strategies have been developed and honed along the way to not only answer the question of "what should we build?" but also ensure the whole team is on the same page, and high quality software is delivered that consistently meets a customer's needs.
Among these processes is what is commonly referred to as Agile Software Development which encompasses a considerable amount of knowledge and process that all works together to achieve the goal of continually delivering working, valuable, software. While Agile processes cover the whole spectrum of the software development life-cycle, from the business vision down to lines of code, this book will focus on only a slice of the big, Agile pie.
Our goal here is to detail the strategy we use to take an idea from its initial concept and transform it into a set of individual requirements.
Knowing this well help you understand the fundamentals of Agile Software Development and set you on a path of success when designing and developing software.
Along the way we'll be discussing the concepts of this book in relation to two archetypal example applications. Chiefly we will focus on a "To-Do List" application, which likely does exactly what you think it does. Secondly we'll also consider a popular application called "MyFlix" which allows content consumers to enjoy watching movies on-line. These should help illustrate the lessons with clear examples. We hope you enjoy!