Every agile software engineering team wants to do these three things:
The reality is that as we focus on improving one thing, sometimes it is at the expense of another. If we focus on accelerating feature development, feature quality could suffer. If we focus on improving feature quality, development could slow, potentially delaying the release. But what if we could have it all?
I’ve been a developer on the Workforce Safety solution since last May. Appian began developing Workforce Safety as a way to help our customers operate safely and effectively throughout the COVID-19 crisis. I knew from the start that the team would need to build quality features as quickly as possible, but I didn’t realize how quickly. Shortly after I joined the team, I learned our objective was to release new versions of the solution with robust, high priority features on a monthly basis. This accelerated release cadence forced us to rethink our processes. We needed an approach that would allow us to build multiple full-fledged features and adhere to our quality standards in a shorter timeframe than we had ever attempted.
It took us some time to figure out what methods worked best to meet our ambitious objective. The method that I believe made the biggest impact was the feature design process. This process involves working as a team on a high-level technical design document before diving into actual development. The document is informal and collaborative; we discuss everything we know about the feature and write down ideas, questions, and development plans for all major requirements. Once the important technical decisions have been captured and the whole team is aligned, the building can begin.
A comprehensive feature design doesn’t have to follow an exact template, but it should answer four important questions:
What data changes do we need?
What queries and business rules do we need?
What workflows do we need?
What UX do we need?
The entire development team is involved in this process on the Workforce Safety project - outlining plans, making suggestions, asking questions, creating test objects, etc. This collaboration strengthens team alignment and makes us even more prepared to begin building. During development, we are able to write code in a way that meets the requirements at both the story level and the feature level.
Since we started using the feature design process, I’ve noticed an enormous improvement in our quality and our velocity. We build more and more every sprint, with tickets rarely bouncing back due to bugs or missing requirements. On top of that, we find fewer regression bugs every release, because we take the time during the feature design to fully analyze how the new functionality will merge with the existing functionality harmoniously.
So it turns out you actually can have it all. Or at least get close to it. With rapid feature development and excellent feature quality, regular releases (even monthly releases!) are much more achievable. The feature design process takes practice. But if you’re willing to invest in it, it’s a great way for your team to start building your software faster and better.