Evolution of Software Design and Architecture #

CS446/CS646/ECE452 Software Design and Architecture, Pengyu Nie #


Software Design is a Moving Target #

The bottleneck in software engineering keeps shifting as we solve old problems and discover new ones.

1980s
Code Structure
OOP, high-level PLs
2000s
Process & Testing
agile, automated testing, CI/CD
2010s
Deployment & Operation
cloud native, microservices/serverless
2020s
Specification & Verification
AI, ?

I. No Silver Bullet #

1980s
Code Structure
OOP, high-level PLs
2000s
Process & Testing
agile, automated testing, CI/CD
2010s
Deployment & Operation
cloud native, microservices/serverless
2020s
Specification & Verification
AI, ?

No Silver Bullet—Essence and Accidents of Software Engineering. Fred Brooks. 1986.


Context: The Software Crisis #

Hardware was booming:

  • Moore’s Law
  • Computing power growing exponentially

Software was falling behind:

  • No equivalent “Moore’s Law” for productivity
  • Projects routinely late and over budget
  • Defect rates stubbornly high

“There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity.”


Essential vs. Accidental Difficulties #

Accidental difficulties come from hardware constraints, awkward programming languages, tools, etc.

Essential difficulties are inherent to the software design problem itself.

“The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions.”


Potential “Silver Bullets” #

Brooks examined technologies that promised breakthroughs. Each one primarily addressed accidental, not essential complexity:

  • High-level languages (Ada, etc.)
    • Removed machine-level accidents
  • Object-oriented programming
    • Better code structure, but same conceptual complexity
  • AI and expert systems
    • 1980s AI: speech/image recognition, rule engines
  • “Automatic” programming
    • Only works when you can specify the problem precisely — which IS the hard part
  • Graphical programming
    • Software is not inherently spatial
  • Program verification
    • Verifies code meets spec; doesn’t help write the spec

Suggestions #

Instead of seeking silver bullets, Brooks recommended:

  1. Buy versus build — reuse existing software whenever possible

    • Today: open-source ecosystems, package managers, SaaS
  2. Requirements refinement and rapid prototyping — invest in understanding the problem

    • Today: user research, MVPs, design thinking
  3. Incremental development — “grow, not build, software”

    • Today: agile sprints, continuous delivery
  4. Great designers — invest in people, not just tools

    • Today: staff/principal engineers, architecture reviews

II. The Agile Revolution #

1980s
Code Structure
OOP, high-level PLs
2000s
Process & Testing
agile, automated testing, CI/CD
2010s
Deployment & Operation
cloud native, microservices/serverless
2020s
Specification & Verification
AI, ?

Manifesto for Agile Software Development. 2001.


The Agile Manifesto #

February 2001: 17 software engineering practitioners met at Snowbird, Utah. They represented competing lightweight methodologies and found common ground in four values:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

"While there is value in the items on the right, we value the items on the left more."


Key Agile Principles #

From the twelve principles behind the Manifesto:



Impact on design and architecture: #

Design+architecture is no longer a phase completed before coding. It becomes a continuous activity that evolves with the software.


Continuous Integration #

“Continuous Integration is a software development practice where members of a team integrate their work frequently… Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.” — Martin Fowler’s blog. 2006.

Key practices:

  1. Automate the build (with tests)
  2. Keep the build fast
  3. Every commit triggers a build on an integration machine
  4. Fix broken builds immediately
  5. Automate deployment when appropriate

Impact on Software Design and Architecture #

Agile + CI enabled a new way of thinking about architecture:

Before: Big Upfront Design

  • Architect designs the system
  • Hands off specs to developers
  • Architecture is frozen early
  • Changes are expensive and resisted

After: Evolutionary Architecture

  • Architecture emerges from development
  • Validated continuously by automated tests
  • Small changes, frequently integrated
  • Architecture decisions can be revisited

III. Cloud Native Architecture #

1980s
Code Structure
OOP, high-level PLs
2000s
Process & Testing
agile, automated testing, CI/CD
2010s
Deployment & Operation
cloud native, microservices/serverless
2020s
Specification & Verification
AI, ?

The Twelve-Factor App. Adam Wiggins. 2011.


Moving to Cloud #

Key milestones:

  • 2006: AWS S3 and EC2 launch
  • 2008: Google App Engine
  • 2010: Microsoft Azure GA
  • 2013: Docker — portable containers
  • 2014: Kubernetes — container orchestration, open-sourced by Google

The fundamental shift:

Servers went from “pets” to “cattle”

  • Pets: named, cared for, irreplaceable
  • Cattle: numbered, interchangeable, disposable
  • No more capacity planning for peak load
  • Scale up on demand, scale down to save money

This changed not just infrastructure, but architecture itself.


The Twelve-Factor App (2011) #

Adam Wiggins distilled 12 principles for cloud-native applications:

  1. Codebase: one repo, many deploys
  2. Dependencies: explicitly declared
  3. Config: stored in the environment
  4. Backing services: treated as attached resources
  5. Build, release, run: strictly separated
  6. Processes: stateless and share-nothing
  1. Port binding: self-contained services
  2. Concurrency: scale via processes
  3. Disposability: fast startup, graceful shutdown
  4. Dev/prod parity: keep environments similar
  5. Logs: treat as event streams
  6. Admin processes: run as one-off tasks

Microservices #

Microservices. Martin Fowler, and James Lewis. 2014.

The article that named and defined the architectural style:

Monolith

UI
Business Logic
Data Access
Single Database
One deployable unit

Microservices

Users
DB
Orders
DB
Payments
DB
Independent services, own data, own deployment

Organized around business capabilities, not technical layers. Each service communicates through simple protocols (e.g., HTTP/REST).


The Stack #

Each breakthrough built on the previous ones:

YearInnovationEnabled
2006CI/CDFrequent builds, tests, releases
2006AWS & Other CloudsElastic infrastructure, on-demand scaling
201112 FactorCloud + CI/CD, Cloud-native design principles
2013Docker“Build once, run anywhere”
2014KubernetesContainer orchestration at scale
2014MicroservicesIndependent service deployment

IV. Future of Software Engineering #

1980s
Code Structure
OOP, high-level PLs
2000s
Process & Testing
agile, automated testing, CI/CD
2010s
Deployment & Operation
cloud native, microservices/serverless
2020s
Specification & Verification
AI, ?

The Future of Software Engineering. ThoughtWorks. 2026.


AI for SE #

AI for software development tasks has gone from research to daily practice:

The question is no longer “Can AI write code?”

The question is: What happens to engineering discipline?


The Rigor Has to Go Somewhere #

“If we stop caring about the code, our rigor has to move somewhere else.”

If coding is cheap, rigor moves to:

  • Specification: precisely defining what should be built
  • Verification: ensuring it’s correct, secure, and meets quality standards
  • Governance: accountability, compliance, risk management

This is Brooks’ essential complexity resurfacing:

AI handles the accidental complexity of writing code. But the essential complexity of specifying what to build remains.


Supervisory Engineering #

A new kind of engineering work is emerging as a “middle loop” sitting between the inner loop of writing code (automated by AI) and the outer loop of CI/CD (automated once configured):


What’s Changing in SE? #

Rachel Laycock’s summary organizes the retreat’s takeaways into three dimensions:

People

  • AI tools increase cognitive load, not reduce it — “velocity without understanding is not sustainable”
  • Engineering role shifts toward supervisory work: agent orchestration & governance
  • Decision fatigue is a real concern

Process

  • Tier software by criticality — focus human review where it matters most
  • Strong CI/CD guardrails become even more important
  • Agent topologies”: how agents fit into team structures and workflows

Technology

  • Safe, constrained languages may be better suited for AI-generated code
  • Shift toward verification (formal methods, property-based testing) over inspecting code
  • Self-healing systems informed by incident history

Summary #

40 years later, Brooks’ insight holds:

There is no silver bullet.


1980s
Code Structure
OOP, high-level PLs
2000s
Process & Testing
agile, automated testing, CI/CD
2010s
Deployment & Operation
cloud native, microservices/serverless
2020s
Specification & Verification
AI, ?