Your Team’s Ongoing Vision Will Determine the Long Term Consistency and Alignment of Your Software Architecture
February 7, 2013 4 Comments
The ongoing consistency of your software architecture depends on its alignment with your business objectives, how suitable the technology choices are, and that your team has bought into and is following the architectural vision. This article demonstrates key factors in determining how suitable your software architecture is in being able to sustain a collaborative long term vision and growth of your software along with the difficulties of trying to ensuring business value without a shared vision or collaborative team input. Real world examples from the field are used to demonstrate successful scenarios, the thought behind them, how buy-in was attained, and how they complemented the QA testing strategy of the business objectives. An approach is given on how to recover failing projects where there was no consistent strategy and to turn chaos into a coherent strategy that is aligned with the business objectives.
Your Team’s Ongoing Vision Will Determine the Long Term Consistency and Alignment of Your Software Architecture
I’ve written a recent article that focused on ensuring that your architecture was aligned with your business objectives. See Aligning Your Software Architecture With Your Key Business Objectives and Why Your Business Needs It. This article goes a step further and demonstrates how team buy-in and a shared team vision contributes to the consistency of the architecture and business value throughout the development cycle.
One of the problems that the architecture of your software should address is consistency. Consistency with technology, design patterns, approaches, layers, frameworks, etc. As software projects evolve, it’s important to ensure that the architecture, especially as aligned with your business objectives, remains consistent. Functional requirements can certainly change along the way, but the key is to do enough architecture work, and ensure consistency, for those big design decisions that need to be made as early in the game as possible.
Ensuring consistency in this capacity isn’t about guidelines for best practices such as re-use of existing components and developing components that are decoupled from one another. These best practices should be part of most (all) development projects. Ensuring consistency of the architecture is about ensuring that the guiding principles of your core-architecture have buy-in, are clear, are being followed, and are driving the long term success of your software in relation to your critical business objectives.
Ensuring consistency can require a certain level of control in some scenarios, however more often than not, very little controls are required when you have team buy-in, and a shared vision from the beginning as to how the business value is being provided. This is especially true once you have a team that is consistently delivering business value with the software. Enforcing too strict controls on teams can be demoralizing for most, and I’m very opposed to forcing development teams to do things a certain way or dictating how work will be done. I’m all for ensuring consistency and a good architecture across the application, but this can be done without forcing, controlling, and dictating how it will be done.
To help ensure consistency and buy-in across the board, it is important to consider the following when coming up with your architecture:
- How crucial are the recommendations at hand to the business?
- Will we see a business benefit by evaluating and following guidelines set around our evaluation?
- What is the long term detrimental impact to the software of not doing this or doing it too late in the game?
- Will following these recommendations eliminate refactoring costs and technical debt later on?
These considerations will help ensure buy-in and ease collaborative agreements with the team as the team will have a better understanding and vision as to the importance of the architecture to the business. Having a consistent vision of the business value helps ensure consistency with the architecture moving forward.
Be sure that team members who want to participate can help collaborate on the architecture or guidelines. This provides ownership by the team members which helps drive and ensure continued consistency. I’ve said many times that architects should not dictate requirements, rather they should create recommendations facilitated by understanding the software, technology, business, customers, etc. These recommendations should involve collaboration and review with the other team members before final architecture decisions are agreed upon and finalized.
Let’s look at some real life examples from the field
Example 1) The sales team had trouble in the past selling to some large customers who used primarily Oracle database servers. The architect discussed the scenario with the business leaders who made up a business case for supporting both Oracle and SqlServer. Collaboratively with the development team, the architect determined that the code base of the entire application could remain the same, but the data layer could be swapped out to support different platforms. The business case helped ensure buy-in of an ORM mapping tool to be used as a data layer that supported both platforms. The team collaborated and evaluated different options finally selecting a tool that met all of the business requirements for performance, scalability, and multiple platforms. In fact, the tool selected would work easily with SqlServer and Oracle platforms with little overhead. It was clear to the entire team how important the ongoing use of this ORM framework throughout development would be to the business and that deviating from this could cause considerable damage to the product and business model. The team was completely onboard with the vision. In addition, this drove the QA testing team to put controls in their testing processes to ensure compliance with this business requirement. The QA testing team made sure, as part of their process, to test the software on both SqlServer and Oracle platforms and multiple platform testing environments were created.
Example 2) Another scenario allowed customers to pay for specific application modules , but not others. It was evident that the architecture needed to adhere to this business model that consistency of the architecture throughout the development process would ensure ongoing compliance with the business objectives. Collaborative team buy-in of the business benefit of this along with the dependency injection and inversion of control framework ensured that the components being built were modular were able to be swapped in and out of the application easily. This would also drive QA testing initiatives that would ensure test plans accounted for and tested this modularity as it is a core part of the business model. From a development standpoint, the team came to a shared vision as to the business reason components are built using this approach. Teams understand that by not doing this or by deviating from this approach that they are creating a refactoring and technical debt cost to fix this later on. Of course, teams are free to improve upon this when new functional requirements are added within the iterative development process.
In these two examples, it was clear to see that team buy in and a shared vision were established because the architectural approaches were well thought out, evaluated, aligned to the business requirements, and had a huge cost to change if we got it wrong. Importantly, the entire team had an opportunity to be involved collaboratively in coming up with the architecture which further strengthened their commitment as they implicitly took ownership among themselves in coming up with the architecture.
It is much more difficult to ensure consistency across development teams without a shared vision about the value being delivered. For example, dictating certain design patterns to be used over other patterns is a subjective decision that will likely fail buy-in as the business value isn’t clear. A forced buy-in approach which will likely fail and will likely lead to team demoralization.
Guidance, recommended patterns, approaches, and coding standards can all be put in place. In reality, it means very little unless we are leading by example and have shown through practice, team buy-in, and business value why we are using said approaches and what the business advantage is. Instead of working on aligning architecture with business requirements, I’ve seen teams spend weeks coming up with coding practices (how to declare variables, which variable naming pattern to use, etc) for new projects. The problem is that most people don’t read or care to look at the documents created from these team sessions, and ensuring compliance for compliance-sake can be difficult and is a waste of time. Even if there is a little bit of value in ensuring how code is written and that variable naming is consistent across the board, I don’t believe documents standardizing the approach provide the value or incentives to do this.
Sometimes, to rescue a failing project, you may need to assert more control and constraints in order to get to a point where the software is coherent and beginning to meet the business objectives. This is a state that we are trying to avoid by doing our up-front architecture work and ensuring consistency with a shared vision. However, as consultants, sometimes we are brought into the project too late in the game. If this happens, trying to fix the solution may require short term measures and controls, but don’t lose sight of the fact that the real value is in ensuring consistent business value through architecture and a shared vision. There may be a lot of refactoring that needs to be done, but the teams still need to share a vision as to the business value of what is trying to be accomplished. My experience is that dictating control will only work in emergency scenarios in the short term just to get to a stabilization point, but for the long term, the team needs to work with a shared vision and understanding of the business value to make consistent progress.
Getting the team’s buy-in and creating a shared vision may be a bit challenging and may take longer in failing projects where the vision wasn’t there from the beginning, but it’s the best bet for the long term success of your software and for the consistency and sake of your business objectives. Once the team has a shared vision and is consistently contributing to the business value, less controls will be required. Your software will be continuously aligned with your business objectives as both the development and testing teams work together to ensure that your software is adhering to your critical business objectives.
Dan Douglas is a professional independent Software Consultant and an experienced and proven subject matter expert, decision maker, and leader in the area of Software Architecture. His professional experience represents over 12 years of architecting and developing highly successful large scale solutions. Dan has been the architect lead on over 15 development projects.