Software Engineering - Open Book

Last updated Jul 23, 2025 Published Apr 30, 2026

The content here is under the Attribution 4.0 International (CC BY 4.0) license

Join Our Community

Connect with developers, architects, and tech leads who share your passion for quality software development. Discuss TDD, architecture, software engineering, and more.

→ Join Slack

This page serves as a comprehensive, open-source reference guide for software engineering—bridging theory and practice across design, testing, development approaches, and operational excellence. Intended for developers, tech leads, and architects, this collection organizes research-backed principles, practical tutorials, and case studies across core areas of software engineering. Whether you’re improving code quality through testing strategies, designing systems with architectural patterns, implementing robust development practices, or building operational excellence, you’ll find evidence-based content grounded in academic literature and industry best practices.

How to cite: Marabesi, M. (2025). Software Engineering - Open Book. Retrieved from https://marabesi.com/software-engineering/

What is Software Engineering?

Software engineering as a discipline emerged in the 1960s and deals with the design, development, operation, and maintenance of software systems (Cameron, 2023). It is fundamentally concerned with the systematic approach to building reliable, maintainable, and scalable software. Beyond writing working code, modern software engineering encompasses architectural thinking, quality assurance, team practices, and operational stewardship. This open book explores software engineering from multiple perspectives—suitable for practitioners at any career stage seeking to deepen their expertise.

Unsure where to start? Navigate by your role:

Part I: Foundations

Part II: Testing & Quality Assurance

Build confidence in your code through systematic testing strategies, from fundamentals to advanced techniques for legacy systems.

Chapter 3: Getting Started with Testing

Chapter 4: Advanced Testing Patterns

Chapter 5: Testing Legacy Code

Part III: Design & Architecture

Learn how to structure systems for maintainability, scalability, and clarity using proven design principles and patterns.

Chapter 6: Design Principles

Chapter 7: Design Patterns & Refactoring

  • Refactoring — Improving code without changing behavior

Chapter 8: Domain-Driven Design

Part IV: Development Practices & Workflows

Establish practices that enable team collaboration, reduce risk, and maintain code quality across your project lifecycle.

Chapter 9: Collaborative Development

Chapter 10: Continuous Integration & Deployment

Part V: Requirements & Specification

Clarify what you’re building and ensure alignment between stakeholders and technical implementation.

Chapter 12: Requirements Engineering

Chapter 13: API Design

Part VI: Operational Excellence

Ensure systems run reliably, improve from failures, and maintain healthy team dynamics and metrics.

Chapter 14: Learning from Failures

Chapter 15: Team Metrics & Health

Part VII: Learning & Reference

Deepen your expertise with curated reading paths and foundational concepts in computer science.

Chapter 16: Advanced Topics & Further Learning

References

  1. Cameron, L. (2023). Margaret Hamilton: first software engineer. In IEEE Computer Society. https://www.computer.org/publications/tech-news/events/what-to-know-about-the-scientist-who-invented-the-term-software-engineering

You also might like