DEV Community

Cover image for If you Think Good Architecture is Expensive, try Bad Architecture
Thomas Johnson
Thomas Johnson

Posted on • Originally published at multiplayer.app

If you Think Good Architecture is Expensive, try Bad Architecture

“If you think good architecture is expensive, try bad architecture” is a quote from Brian Foote & Joseph Yoder.

In the world of software development, Forbes’s question of whether software architecture still matters has a resounding answer: absolutely yes.

Defining an architecture early, though subject to change during development, helps your team understand the impact of business and technical decisions. Serving as a clear reference, the architecture highlights the system's priorities and the constraints on application development. It offers a shared vocabulary and frame of reference, aiding teams in developing a common understanding of the application's workings and the ramifications of their decisions.

Traditionally, architects were pivotal in crafting this foundational architectural blueprint.

However, the role and significance of the Software Architect is undergoing dramatic changes, influenced by factors such as the:

  • Rise of the Agile methodology and DevOps
  • Prevalence of distributed systems
  • Increasing reliance on SaaS, open-source software, and a plethora of new technologies that support “assembly-like” software

Today's fast-paced development cycles, characterized by high-frequency releases and quick-turnaround MVPs, demand that Software Architects remain actively involved throughout the entire lifecycle of applications. This evolution raises important questions about the nature of the role: Is it a full-time job for an individual, or one of many part-time roles played by senior engineers?

In this article, I deep dive into the evolving landscape of the Software Architect role, addressing common misconceptions and shedding light on its changing dynamics.

Anti-Patterns in Software Architect Roles

Software architecture, while integral to the successful development and maintenance of software systems, is not immune to pitfalls and misinterpretations. Here are five challenges and misconceptions that can hinder effective software architecture:

(1) Associating the activity exclusively with a specific role

This anti-pattern stems from the misconception that 'Software Architect' and 'Software Engineer' are separate roles with distinct activities. In truth, software architecture is a core engineering skill, and only those with substantial engineering experience can become effective software architects.

Software architecture crucially shapes how software is designed, developed, and maintained, profoundly impacting its functionality, quality, and longevity. It entails critical decision-making about system structure and component interactions, essential for achieving scalable and high-performing systems, especially in the realm of distributed software (which is most software nowadays).

In essence, possessing system design experience and considering architectural requirements when coding makes you a better engineer and results in a better product.

Most agile teams, particularly in startups and scale-ups, “instinctively” engage in system design and software architecture in their day-to-day activities. When faced with complex problems offering multiple solutions, they research options, discuss them with the team, and then write a proposal to gather feedback and identify potential issues. If this process of creating and circulating a "design document" sounds familiar, it's because it is often a responsibility attributed to Architects.

A dedicated full-time software architect becomes necessary only when a project attains a certain level of complexity and scale, requiring the coordination of multiple agile teams on a larger system.

Conversely, years of engineering experience are essential to becoming a competent software architect. Architects need to be able to contribute to the code - this experience provides a deep understanding of software development principles, practices, and challenges. It's akin to why successful engineering managers periodically engage in hands-on work: to maintain their technical skills and credibility gained from "time in the trenches.”

(2) Unbundling decision-making authority from the responsibility for results

When architectural thinking is seamlessly integrated into the engineering process, the entire team collectively shoulders the responsibility for the final output. This encompasses all phases: designing, developing, maintaining, and operating a service. Technical decisions are made collaboratively, considering not only the optimal solutions to meet functional and non-functional requirements but also the team's existing technical knowledge, skills, and capacity.

However, when those who make technical decisions are not accountable for their implementation, a crucial disconnect emerges — they have "no skin in the game.” The lack of ownership in the final outcome (and its maintenance) often leads to “design by buzzword”, where choices are made based on trendiness rather than suitability. It can result in the selection of technologies unfamiliar to the team or the endorsement of sub-optimal solutions that reflect a superficial understanding of the problem, or worse, a disregard for modern engineering practices and the practicalities of implementation.

Furthermore, this separation of decision-making authority from responsibility also disempowers engineering teams. It places them in a position where they are compelled to follow directives they may not agree with or fully comprehend, stifling innovation and team morale.

(3) Perception of the Architect as an unquestionable authority

Perceiving the software architect as a distant, authoritative figure immune to questioning or challenges leads to diminished collaboration and limited team input in architectural decisions.

This issue is often exacerbated by significant disparities in pay and the perceived prestigious roles that many organizations maintain. Architects are often seen as high-level thinkers, too busy and important for the hands-on tasks of coding, debugging, and reviewing pull requests (PRs).

However, this approach is ultimately detrimental to both the architects and the development teams. It creates a figure lacking credibility, expertise, or moral authority to make informed decisions for the team. Simultaneously, it fosters a team environment where members may feel uncomfortable or ill-equipped to implement and maintain the final architecture effectively.

(4) Overemphasis on standardization in large organizations

Every company inevitably requires a degree of standardization and coordination. In large organizations, "architecture" tasks are often consolidated within specific roles, with the Enterprise Architecture group taking a leading position.

This approach is logical, considering the time needed to coordinate multiple stakeholders, interface with the business, and advocate for large-scale projects (such as refactors or replacements of legacy code) in enterprises. It's also apparent when considering the high overhead and complexity involved in documenting an enterprise system architecture, maintaining up-to-date static diagrams and documentation, and recording all architectural decisions.

The benefits of these activities are clear: businesses recognize the immense value in having a shared understanding of the system architecture and a clear vision of how to anticipate and integrate emerging technologies effectively.

However, over time, the Enterprise Architecture practice has devolved into a gatekeeper of innovation, hampering organizations’ flexibility and responsiveness to change. The focus on stardardization of processes, enforcement of technological rules, heavy upfront planning and the bureaucracy of excessive or overly detailed architectural documentation creates a disconnect that does not align with the reality of continuous transformation.

These processes often persist long after their usefulness has waned, in a self-reinforcing cycle, because specific jobs and roles depend on their existence.

(5) Neglecting architecture processes in agile environments

When the Agile Manifesto was introduced in 2001, it stated that one of the 12 principles of agile software is that “the best architectures, requirements and designs emerge from self-organizing teams”. This principle led to some confusion among teams, with a few interpreting agility as an excuse to entirely bypass architectural planning. This misconception has often resulted in the accumulation of technical debt and unsustainable development practices.

Today, most teams acknowledge the critical importance of software architecture and its significant impact on the final quality of the product. However, the execution of architectural practices is frequently haphazard, marked by inconsistent communication among team members, ad-hoc inputs to design decisions, and inadequate documentation of design assumptions and alternatives.

Commonly, design decisions and system architecture information are:
Casually scribbled on whiteboards or in notebooks, lacking a structured format.

Discussed in meetings, with insights limited to those in attendance.
Communicated through emails or Slack messages, which are prone to getting lost or overlooked over time.

This scattered approach is partly due to the plethora of tools and resources that developers need to manage when working on distributed systems.

The Future for Software Architects

With the advent of agile methodologies, the role of Software Architects has significantly evolved. Moving away from an authoritarian, decision-making stance that dictates architecture, they are now embracing a more consultative and engaged approach.

Today's effective Software Architects function as consultants, educators, and supporters, collaborating closely with the engineering team to co-create architectural decisions. In this new paradigm, architects no longer unilaterally make and enforce technical decisions for engineers to implement.

Instead, the engineering team maintains the authority to make final decisions, as they are the ones who will directly experience the consequences of these choices.

For developers, this shift means recognizing that software architecture is a core engineering requirement, significantly enhancing their ability to perform effectively.

This shift towards a collaborative and supportive dynamic signals a promising future for both software architects and engineers, fostering an environment where shared expertise and influence collectively elevate the entire development process.---


If you are interested in a deep dive in the above concepts, visit the original: The Rise of Modern Software Architects


If you'd like to chat about this topic, DM me on any of the socials (LinkedIn, X/Twitter, Threads, Bluesky) - I'm always open to a conversation about tech! 😊

Dev Diairies image

User Feedback & The Pivot That Saved The Project

🔥 Check out Episode 3 of Dev Diairies, following a successful Hackathon project turned startup.

Watch full video 🎥

Top comments (0)

👋 Kindness is contagious

Delve into a trove of insights in this thoughtful post, celebrated by the welcoming DEV Community. Programmers of every stripe are invited to share their viewpoints and enrich our collective expertise.

A simple “thank you” can brighten someone’s day—drop yours in the comments below!

On DEV, exchanging knowledge lightens our path and forges deeper connections. Found this valuable? A quick note of gratitude to the author can make all the difference.

Get Started