Fundamentals 10 min read

Why Software Engineering Still Lacks True Engineering Maturity After 30 Years

The article defines engineering's five core elements and argues software engineering remains immature due to missing knowledge codification mechanisms, reliance on original design over routine design, and lack of quantitative architectural models, despite progress in abstraction layers and tools.

Thought Artisan
Thought Artisan
Thought Artisan
Why Software Engineering Still Lacks True Engineering Maturity After 30 Years

Definition of Engineering

The article opens with a definition from Mary Shaw and David Garlan's Software Architecture: Perspectives on an Emerging Discipline : engineering is "the disciplined application of scientific knowledge to resolve conflicting constraints and requirements for problems of immediate, practical significance." Five core elements are identified:

Creating cost-effective solutions – economical use of all resources, including money.

Addressing practical problems – solutions matter to customers outside the engineering discipline.

Applying scientific knowledge – using science, mathematics, and design analysis.

Building tangible artifacts – producing concrete, working systems.

Serving humanity – developing technology and expertise that support society.

Core Mechanism: Codification of Knowledge

Mature engineering differs from virtuoso performance or craft by systematically codifying scientific and practical knowledge. This codification achieves three things:

Eliminates absolute reliance on genius – engineering shares prior solutions rather than depending on virtuoso problem solving each time.

Enables ordinary practitioners to build reliably – average engineers can create complex, working, highly reliable systems.

Depends on handbooks and standards – like the Perry's Chemical Engineers' Handbook , mature disciplines rely on documented design equations, specifications, and standards that capture and disseminate design knowledge.

Software Engineering's Immaturity

3.1 Missing Knowledge Codification and Reuse Mechanisms

"In chemical plant design, when I need a heat exchanger I consult standard references and apply standard design equations… In software, unless my team happens to remember a past solution, I am forced to reinvent the wheel for every application." (Senior engineer from software engineering community)

Algorithms and libraries (math libraries, system calls) exist but are local, incomplete, and cannot support macro-architectural design and reuse.

3.2 Design Paradigm Gap: "Routine Design" vs. "Original Design"

Most software development is still treated as original design rather than routine design . Without codified, shared mechanisms, developers repeatedly build from scratch without sufficient reason, leading to high cost, schedule overruns, and defects.

3.3 Disconnect Between Computer Science and Practice

Computer science produces excellent theories (formal specification, parser generators), but packaging them into industrial-grade tools and handbooks for daily engineering use takes ~20 years. Practice often operates independently of organized scientific knowledge.

Progress Over 30 Years (1995–2025)

Abstraction-Level Leaps

From 1990s components and connectors to today's microservices , cloud-native declarative resources , and agent intent . Each leap hides lower-level details, letting developers work at larger cognitive granularity.

Knowledge Sedimentation Lifecycle

Early ad-hoc phase gave way to pattern handbooks (GoF Design Patterns , architecture patterns). Reusable systems now exist: Spring, Kubernetes, databases ; architectural styles (microservices); component/connector libraries (REST, gRPC, message queues); and documented practices.

Development Platforms and Tools

Full-lifecycle platforms: CI/CD pipelines, GitHub/GitLab/Gerrit, program analysis tools, collaborative IDEs, automated testing, and now Code Agents .

Persistent Gaps: Architecture Remains a Craft

1. No Unified Architecture Description Language

Formal ADLs have faded in general industry due to high cognitive/maintenance cost and the "two-skin" problem: architecture documents stay on paper while code iterates rapidly, with no strong bidirectional sync. Lightweight alternatives now used: ArchUnit , C4 model , 4+1 view model , ADR (Architecture Decision Records) .

2. Architecture Knowledge Maintenance Still Non-Standardized

Four key aspects lack systematic organization and reuse:

Architectural styles & design vocabulary

Design space & selection rules (design decisions)

Domain-specific reference architectures

Formal or informal visual architecture topology

3. Lack of Quantitative Architectural Design Models

Major architectural choices (e.g., "Should a microservice system have 20 or 50 services in 2026?") still have no mathematical equations or quantitative prediction models . The industry relies on senior architects' intuition or blindly copying "big-company practices" – classic experiential craft trial-and-error. Reference: Software Architecture: The Hard Parts .

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

software architecturesoftware engineeringengineering disciplinequantitative modelingarchitecture description languageknowledge codificationoriginal designroutine design
Thought Artisan
Written by

Thought Artisan

I think, therefore I am; recording insights from daily life and technology.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.