A significant hurdle for many stakeholders at the beginning of a software project is understanding the development process. Expectations for the best way to manage software development have changed a lot in the past decade, so it’s worthwhile to be familiar with how developers translate your idea into code. Throughout the process, the focus will be on the people who will actually use your app, the users.
First Steps
To start, we as developers need to discover your intention for your app, in what we call the discovery phase. We need to take your broad vision for the project and break it down into tasks that we can act on. Importantly, we need to keep users in mind, so these tasks will be defined from their perspective - so much so that the tasks will tell the story of the user experience that you expect your app to provide. To make story-writing as straightforward as possible, we adhere to a specific structure:
You Say | User stories |
---|---|
The user should be able to create an account | As a user, I want to see the registration form when I click the Register button |
As a user, I want to receive an email that confirms my registration. |
Using this format, these user stories are actionable tasks that our developers can use to create your app according to your requirements. These user stories act as touchstones for two very important aspects of software development: comprehension and testing. Using the user story format allows our developers to quickly and clearly comprehend your requirements. The format also helps you, as the stakeholder, verify that our implementation meets your needs. This is called acceptance testing.
Cruising Altitude
Once we’ve gotten up to speed with your expectations for your app, and have done some work of our own determining the engineering requirements, we will begin actually building your app. Here’s where a lot of people expect the developers to disappear for a long time, then return with a fully-formed web application ready for users. That way of software development is fraught with problems. Your vision for the application requires your continuous feedback so that the end result closely matches your expectations. If the implementation doesn’t match your expectations, we need to work together to efficiently hone the implementation by iterating this coding-feedback loop. Otherwise, development can drag on for weeks and months.
To that end, we develop software collaboratively with you and will ask for your feedback on a daily basis. This feedback is centered around the user stories that were written in discovery and that we have been developing implementations of. The basic day-to-day development process is as follows:
- Developers write code that satisfies the requirements of a user story.
- Developers ask you to verify that the user story is implemented to your satisfaction.
- If it doesn’t fully meet your needs, developers will incorporate your feedback and update the code. Go back to step 2.
- The user story is accepted and we make the implementation available to users.
Long-term Considerations
This day-to-day process continues until the app has a minimum set of features that make it useful for your users. This minimum viable product is the baseline for learning how users interact with the app, which might be different from your expectations! Garnering and incorporating user feedback from here on will be an imperative part of the development process.
For some applications, new user stories will be continuously generated: the stakeholder or users will expect more features, and more user stories will be written and implemented to match those expectations as the budget allows.
As time goes on and the size of a codebase grows, the app will require optimizations, maintenance, and bug fixes. These are inevitable duties when building software, and so should be taken as given from the beginning of the project. Fortunately, the process for attending to these duties is the same process as for building new features. Bugs and slow operations are enumerated and acted upon as they are discovered, and maintenance is an ongoing process so that outdated and obsolete code is updated and culled, dependencies are kept up to date, and the app remains secure.
This process of collaborating with you as we go is the most painless way to develop software that we’ve found. More collaboration and feedback means an app that will work for years with fewer costly surprises and provide more value for you and your app’s users.