Analyzing post-development customer insights provides a straightforward way to drive the development of new features and address problems with what you’ve already released. The challenge, however, is to take this one step further: Designing your software to ensure it works before customers have the chance to tell you what you’ve overlooked so you can avoid the scramble to fix and add these features.
To do this, developers need to strengthen their focus on application design, not on great-looking architecture diagrams or aesthetically pleasing code. Clean diagrams and code are both great benefits that those who value the craft enjoy but are meaningless on top of a poorly designed application. Instead, these things should be byproducts of a pure focus on good design.
Here are a few DevOps practices that can help strengthen the application design process.
Identify specific areas of concern
If you’re going to need to change your software tomorrow, you’ll want to be able to do that quickly, cleanly and as safely as possible. Remember that every design implementation has a cost to it – such as layers of indirection and additional programming patterns. These things aren’t free, and each new element adds to the complexity of the system.
Any time you want to add a new application feature or function, consider when the right time is to do so – or if it even makes sense to add at all. Focus on which specific areas of the product you want to innovate, or which might go through rapid changes as business demands and technologies change. You can’t predict all of these upfront, but you can at least make some well-informed and educated guesses.
Be careful with documentation
You need to observe how your customers are using an application, where they spend their time and where they have problems. This way, you’ll put more design energy and effort into productive areas.
For example, I’ve worked on projects where developers took indirection and abstraction a bit too far. When I was looking in the code to find where the actual work was occurring, I ended up nine layers deep into the stack and almost forgot what I was looking for.
You may use a lot of good design patterns and follow best practices, including sticking to a visual page-worth of code. But you also need to make sure it’s easy for other developers and architects to read and understand. In most cases, you can avoid the nine layers of indirection mentioned above, as it’s likely those layers don’t even need to be modified or changed over time. Including these layers doesn’t add value — it just adds complexity.
Eliminate development silos
DevOps combines software development and IT operations, which shortens development cycles and promotes collaboration and real-time communication across diverse sets of workflows. Design should revolve around a specific plan for constructing a system or implementing a process.
Integrating DevOps with design means unifying workflows and platforms to promote collaboration and encourage cross-functionality. Bringing these disconnected development silos together is a great way to produce better products and deliver them faster.
Darren Broemmer is a veteran developer and engineering project manager and has worked at a range of companies, including AWS. Currently, he helps others learn from his experiences as a developer evangelist at DevGraph, a provider of integrated software development tools and support.