In a world of rapid and constant change, businesses need to adapt to both internal and external forces and shifts in paradigm, almost instantly. When it comes to building software to enable these essential iterations, all too often a trade-off between the short-term (cost and urgency to launch) and the long-term (vision, quality, and sustainability) is experienced.
Design, develop, and roll out a brand new system in record time, and the risk to quality generally increases significantly. Functional flexibility and correctness is endangered through lack of technical design foresight: where benefits may have existed to abstract concepts and tools to be generic, reusable, and future proof, they are unlikely to be actualized. There is insufficient time or creative space to even conceive of them. Basic technical quality (especially in terms of edge case stability and non-functional capability) almost always suffers. Worse still, this decline in quality often manifests long after the cause, making a correction in course that much harder.
However, investing more time (money!) at the outset seldom carries any kind of guaranteed or measurable benefits. It is certainly a difficult sell to an embattled board. Opportunities to strategically break into the Internet of Things, Blockchain, and AI, are frequently put off due to a fear of the unknown and a lack of trust in the potential returns. The wisdom gained from hindsight in these cases is scant comfort to the decision makers and stakeholders.
But, what if there is a way to get the best of both worlds? Rapid time to market, maintaining the highest attainable levels of flexibility and agility, all the while never compromising quality…
For several years now, we have been working with the mindset that it is not just possible, it is an absolute must. One of the many tools we employ in this aim is the use of a set of Internal Reference Architectures.
At its simplest, a Reference Architecture can be thought of as a Template, or Blueprint, for how to best design, structure, and build a software solution. The patterns and practices within the architecture are a combination of industry best practices and recommendations, and proven successes from extensive case experience. They are debated, tested, curated, and tested again, to an almost fanatical degree. When a new project begins, the most appropriate reference architecture is selected by the principle Architect and his team, and the new project is then created using this as its blueprint. Modifications likely to be needed, if any, are discussed carefully at the very outset.
With this backdrop, let’s examine some of the guiding principles, and their benefits:
Much of a project’s software is non-functional (i.e. it is in no way specific to the client’s business requirements or domain). Yellowtail has an extensive library of these tools, or building blocks, that are well proven “in the wild”, as they get used on multiple projects. The use of these reusable libraries is a well-established best practice in the software industry, and gives two significant advantages, the impact of which cannot be exaggerated:
By the nature of reuse, the code is likely to have been tested on multiple live environments long before it is even incorporated into the new project. The functionality therein has been refined and improved over a long period (usually several years). Simply put, the quality is *always* better.
No extraneous development efforts are expended in “reinventing the wheel”. Development (and design, and analysis, and testing, and so on) can be focused where tangible and visible benefits can be realized: the client’s functional concerns. In short, we save massive amounts of time.
The software development world is a colourful and many-headed beast. With innumerable languages and technologies, countless philosophies and design patterns (many of which are in conflict with each other!), and a seeming inability in many quarters to agree on simple terminology, there is an ever-present risk of broken communication. Ultimately, if a team’s members all speak a “different language”, at best, the project delivery slows down while they agree on a common language, and at worst, features are simply built incorrectly, due to confusion of terminology and concepts. Therefore, the standardization of an architecture provides a common, structured lexicon that helps create alignment between all stakeholders on a given project, and organizationally between projects.
The pre-existing framework upon which new ideas can rapidly be built is invaluable in creating and maintaining a good, positive momentum on a new project. The “blank canvas” effect can be a significant hindrance on a brand new project, where every detail needs to be conceived, planned, designed, and built, before the customer’s functionality can be fully realized. Instead of the inevitable daunting task that awaits the broader project team when starting from scratch, a reference architecture provides the ideal substrate to allow a rapid start, in concert with open innovation.
A good reference architecture creates a cohesive and predictable landscape within which technical experts can flourish. A curated “subset” of standards and the like exist in the company, which creates a continuity, and comfort, for people to move easily between projects. We have seen marked reduction in the time needed to bring new team members up to speed with the current project. More interestingly, however, the pool of resources begins to extend well beyond the official project team, when colleagues are easily able to converse, brainstorm, design, and debug together, at an organizational level. This is only easy because of the continuity, and consistency, that is actively cultivated between projects.
We believe in principles and concepts over technologies and rules. As such, we do not have one single, monolithic reference architecture, rigidly defined and documented and jealously guarded by a select few. Rather, we have an ever growing, ever evolving set of architectural building blocks and sample architectures, each of which has its own set of ideal cases. This means that regardless of your business’s industry or sector, regardless of whether you need a high-volume public facing site or a complex and feature-rich back end system, regardless of whether you are needing to integrate numerous complex back-end systems or are trying to beat your competitors by breaking into the exciting world of Blockchain before them….we have the tangible pieces ready, and the expertise and experience to select the best combination to start, and then to adapt and evolve with you over time.
The various building blocks and their interaction that form our Internal Reference Architectures at Yellowtail have provided immeasurable benefits to us as an organization, and to our clients too. We have seen and experienced the positive results of employing this philosophy, which is why the continual expansion, innovation, and evolution of this “living blueprint” is so core to our technical strategy. This focus has shown us and our clients, time and time again, that there is a happy middle ground, a “best of both worlds” after all. For us, it is not just a hopeful ideal, but a tangible and rewarding reality.