My capstone team selected our project (Citizen Science App for Kids) and began the initial planning. I had the same internal conflict that I have whenever I start a new project. How much time and energy should I spend planning what the app will look like, when our plans and designs will invariably change as we learn more about the project and requirements when we start coding? Plan too much and a lot of that time and effort may seem to be wasted, and plan to little and you find yourself having to do an excessive amount of refactoring to fix things that you did not account for when you started coding.
In my (limited) experience working on software projects I have found that it is useful to spend a great deal of time planning the architecture of the software as this can be especially costly to refactor. This includes things like:
- What languages and frameworks will we be using
- What routes will the backend serve and what information will the backend send to the frontend
- Wireframes for major UI components and screens. These do not need to be extremely detailed but should convey how the user will interact with the application.
Prior to learning about agile development, the only tool I had seen to manage large projects was a Gantt chart. Agile seemed to be a way to push off planning for another day while still having the appearance of having an organized development process. As I began to work on larger projects for OSU classes and as part of my internship, I started to appreciate agile more. Agile is not just a way to ignore planning, but to address the reality that the design process is cyclical. It allows development teams to plan enough to get started and adapt quickly as they learn more, either when they start actually implementing their ideas, or as the customer provides new/different/more clear requirements.
It can sometimes seem daunting to start writing code without having 100% confidence that your plans reflect what the final product will look like, but you have to trust that you and your team will be able to adapt to changing requirements and that agile provides a framework to keep things organized as your initial plan and the project requirements change.