Skip to content

Instantly share code, notes, and snippets.

@gordol
Created September 23, 2024 22:08
Show Gist options
  • Select an option

  • Save gordol/adf5e81a79cdf701acb3749944bba0a8 to your computer and use it in GitHub Desktop.

Select an option

Save gordol/adf5e81a79cdf701acb3749944bba0a8 to your computer and use it in GitHub Desktop.

Architecture as a Discipline

Author(s):

Gordo Lowrey - Architect

Date:

September 2024

Summary and Purpose

Architecture provides the foundation for aligning technical solutions with business goals, managing complexity and enabling efficient data processing, while ensuring that systems remain secure, performant, and adaptable to future needs. This document seeks to define architecture as a discipline, developing a culture where architectural thinking is embedded in daily practice. Architecture is not the sole responsibility of architects, but a shared discipline that drives consistency, scalability, and long-term success. By instilling architectural principles, all teams will create an ecosystem that is efficient, maintainable, and aligned with business objectives.

Architecture as a Discipline

The purpose of this document is to:

  • Embed architecture as a shared discipline across all engineering teams.
  • Define the role of the architect as a strategic enabler, supporting teams in making sound architectural decisions.
  • Ensure that teams understand when and how to approach architectural decisions.
  • Promote a culture of architectural awareness throughout the entire software development and product life-cycle, from planning, to implementation, and beyond.

Stakeholders, engineers, and architects must work together to ensure the integrity of our systems, focusing on long-term maintainability, scalability, and product/business alignment.

Why Architecture Matters to Everyone

Architecture is not only for architects; every engineer and stakeholder plays a part in ensuring that our systems are robust, secure, and future-proof. The value of a shared architecture discipline includes:

  1. Long-Term System Integrity: Architectural decisions made today will impact the system years down the line. Teams must be mindful of the trade-offs between short-term fixes and long-term sustainability.
  2. Scalability: Our systems need to process large volumes of information efficiently. Thoughtful architectural decisions are critical to ensuring that systems can scale to meet growing demands without compromising performance.
  3. Security and Compliance: Adhering to architectural best practices ensures that all systems meet data security and compliance standards, reducing risk.
  4. Cost Optimization: Efficient architecture enables efficient resource management, minimizing unnecessary costs, whether related to infrastructure, development, or maintenance; teams should always consider the cost implications of architectural choices.
  5. Collaboration and Consistency: A strong architectural foundation helps ensure that systems built by different teams fit together cohesively, avoiding fragmentation, duplication of effort, and misalignment.

Discipline in Practice

Every engineer, regardless of their role, has responsibilities within the architecture discipline.

1. Understand the Bigger Picture

  • Engineers should develop an awareness of how their work fits into the broader system. Understanding the overall architecture and its goals ensures that individual contributions support long-term system stability.

2. Embrace Ownership

  • While architects provide guidance, engineers must take ownership of architectural decisions within their domain. This involves considering the impact of their choices on performance, maintainability, scalability, and security, among other concerns.

3. Prioritize Consistency and Standards

  • Adhering to established patterns and standards is crucial for long-term sustainability. Engineers should resist the temptation to implement one-off solutions that do not align with the broader system architecture.

4. Think Long-Term

  • Engineering teams must balance immediate delivery needs with long-term technical health. Decisions should not be made purely for short-term gains, as they often lead to technical debt and future system inefficiencies.

5. Engage Early and Often

  • Teams should involve architects early in the decision-making process, especially when the overall system may be significantly impacted. This reduces the risk of rework and ensures alignment with the technical roadmap.

6. Document Decisions

  • Architectural decisions must be documented, ensuring traceability and transparency. Every major technical decision should have a clear rationale, allowing future architects, engineers, and stakeholders to understand the reasoning behind the system design.

The Architect Role

The architect serves as a strategic enabler, guiding teams in making architectural decisions that align with our goals. However, architects are not gatekeepers of all decisions.

Providing Guidance, Not Control: The architect's primary function is to provide guidance on significant technical decisions. Engineers are empowered to make day-to-day architectural choices, but must know when to seek input.

Driving Strategic Vision: Architects focus on long-term scalability and technical direction, working closely with product and engineering leadership, to align technology with product and business strategy, ensuring that decisions made today align with future needs.

Facilitating Collaboration: Architects help bridge the gaps between teams, ensuring that technical decisions are not made in isolation, avoiding silos and fragmentation, so that decisions made in one area of the org do not negatively impact others.

Bringing Awareness: Architects encourage all teams to be mindful of the broader system when making technical choices, ensuring consistency and stability across the ecosystem.

When to Engage the Architect

Architects should not be involved in every decision, but there are key moments where their expertise is critical.

Project Initiation:

  • Engage the architect at the start of a new project to review requirements, select technologies, and ensure system-wide alignment.

Major Changes

  • Any time there is a shift in architectural design, such as: moving from one architecture to another, changing database technologies, shifting data models, utilizing new frameworks, introduction of cross-system breaking changes, etc...

Cross-Team Dependencies

  • When projects involve multiple teams, or have dependencies across services, it is essential to ensure that architectural alignment is maintained.
  • If a change affects multiple teams (shared services, APIs, or cross-team data dependencies), the architect must be consulted to align on integration and dependency management.

Security and Compliance

  • Any changes that involve system security or handling sensitive data should consult with the architect to ensure adherence to company data policies, best practices, and industry norms.

Cost Optimization or Performance Scaling

  • Decisions involving cloud infrastructure, deployment strategies, and cost optimization, all benefit from strategic oversight, ensuring that solutions are efficient and cost-effective.
  • When systems need to scale, or when performance bottlenecks arise, architects can provide strategic and tactical advice.

Architectural Awareness

To truly embed architecture as a discipline, we must build a culture of awareness and collaboration, across teams: Learning Opportunities: Engineers should be given opportunities to learn about architectural principles and best practices (training, workshops, mentoring, etc...) Collaborative Reviews: Regular technical reviews that include both architects and engineers helps to ensure that teams are aligned on architectural goals, and knowledge is shared. Feedback Loops: Encourage open channels of communication where engineers can seek feedback from architects early and provide their insights to improve the overall architectural framework. Design Thinking: Encourage teams to think critically about how each piece of the system contributes to long-term product health.

Shared Responsibility

Architecture is a shared responsibility, essential to the success and smooth operation of our company. By embedding architectural thinking across all teams, our systems can be scalable, secure, and maintainable in the long term. Architects provide strategic guidance, and may occasionally sling some code, but the discipline of architecture is owned by every engineer. Together, we can create a product ecosystem that supports growth, optimizes resources, and ensures the integrity of the data we process.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment