Architecture

Theory

Tyler Graf

Senior Web Dev

Tree Team

Architectural Myth

Developer

Architect

Architectural Truth

Developer

Architect

Architect

Muscle Mass === Responibility

All Developers are Architects

Component

App

Set of Apps

Website

Real-world Architect ≠ Software Architect

  • Design EVERYTHING up front
  • Do not construct
  • Building lasts a long time without changes

Architect

Gardener

Architect

Town Planner

Architect

What is the Role of an Architect?

(Within your scope)

All Developers are Architects

The single architect is a servant leader, there to make sure all developers are competent architects who understand and consider architectural issues as they work.

Main design responsibility

Assure coherence across the system

The architect is the expert, but also the coordinator, teacher and mentor.

So you want to be an Architect?

A Good Architect:

Skilled Coder

Design Patterns

Conferences

Network w/ Architects

Read Code

Write Code

Communication Skills

Presentation Skills

Look at open source software well enough to understand it's pros and cons architecturally

Hey

OK

Architects know how to ask the right questions

  • Talk to developers to understand problems
  • Talk to product managers to understand requirements

  • Research public packages and services to see if there's an open source or paid solution
  • See how others in the community are solving it

Problem Solver

Build an Architecture System Over and Over

Allen Holub

Gretchen's Cookbook

~600

Recipes

PHP (2008)

PHP (2008)

Linux Server

  • server admin
  • linux
  • php
  • mysql
  • queries
  • url query params
  • domain registration
  • cname
  • html
  • css
  • jquery
  • ux

Rails (2009)

Rails (2009)

Linux Server

  • ruby
  • rails
  • jquery
  • social sharing
  • pre-pwa
  • media queries
  • svn
  • ssh

Angular (2012)

Angular (2012)

cookbook-api.herokuapp.com

  • heroku
  • git
  • node
  • express
  • rest
  • mongo
  • mongoose
  • angular 1
  • xhr

gretchenscookbook.com

Polymer 1 (2015)

Polymer 1 (2015)

  • nosql
  • firebase
  • pwa
  • service worker
  • real time db
  • polymer 1
  • performance

gretchenscookbook.com

Polymer 2 (2017)

PWA, node, mongo

Polymer 2 (2017)

cookbook-api.herokuapp.com

  • Polymer 2
  • offline
  • performance
  • ES Modules
  • Auth

gretchenscookbook.com

Lit (2019)

React (2021)

Architects make

It's OK to be wrong

It's OK to change your mind

A Good Idea

Tower blocks in Great Britain

Lit

React

Angular

Polymer

Frontier Controls

Sunk Cost Fallacy

Even if we spent 100K on a thing and it's the wrong solution, we shouldn't spend time blaming people, we should just move forward with the right solution.

Agile Manifesto

Responding to change over following a plan

Don't plan out 10 years

2-3 is plenty

Ivory

Tower

Architects should experience the hard parts

Example from Erik Dörnenburg

Frontend

Backend

ESB

id

Example from Erik Dörnenburg

Frontend

Backend

ESB

id

id

id

id

id

data

data

data

data

data

Surreal Architecture

Surreal Architecture

components

App Shell

Service

axios

local cache

Thanks Joey Cozza

"I don't think there's an architect or developer that can claim they intuitively understand the web of dependencies and actually grok them."

-Erik Dörnenburg

Collaboration

Always develop/review your architecture with someone else

Alternate Spouses

zion-user

Reviewing Architecture

  • Use your experience to guide

  • Don't nitpick

  • If you hate 8 things in a PR, pick 1 or 2

import React, { useState, useEffect } from "react";

export default function MyComponent({ value }) {
  const [thing1, setThing1] = useState();
  const [thing2, setThing2] = useState();
  const [thing3, setThing3] = useState();

  useEffect(() => {
    setThing1(value + 1);
  }, [value]);

  useEffect(() => {
    setThing2(thing1 + 1);
  }, [thing1]);

  useEffect(() => {
    setThing3(thing2 + 1);
  }, [thing2]);

  return (
    <ul>
      <li>{thing1}</li>
      <li>{thing2}</li>
      <li>{thing3}</li>
    </ul>
  );
}
import React from "react";

export default function MyComponent({ value }) {
  const thing1 = value + 1;
  const thing2 = thing1 + 1;
  const thing3 = thing2 + 1;

  return (
    <ul>
      <li>{thing1}</li>
      <li>{thing2}</li>
      <li>{thing3}</li>
    </ul>
  );
}

Your architectural decisions will affect others

Your architectural decisions will affect others

Ask for feedback!

Be considerate.

Be teachable.

Study References

Architecture Theory

By Tyler Graf

Architecture Theory

  • 587