Software Engineering
Software Engineering¶
A comprehensive guide to software engineering as a discipline — covering the processes, methodologies, management techniques, and professional practices that transform individual programming skills into the ability to build large-scale, reliable, and maintainable software systems. This topic bridges the gap between writing code and engineering software.
What You'll Learn¶
This topic focuses on the engineering discipline of software, not language-specific code:
- Foundations: What software engineering is, its history, and why it matters
- Process Models: Waterfall, agile, spiral, and iterative development approaches
- Requirements: How to capture, specify, and manage what software must do
- Design and Modeling: UML, architectural thinking, and design documentation
- Planning and Estimation: How to estimate effort, plan projects, and manage risk
- Quality: Testing strategies, verification, validation, and quality assurance
- Configuration and Release: Version control, change management, and CI/CD
- Project Management: Scheduling, teams, communication, and stakeholder management
- Maintenance: Evolution, legacy systems, and technical debt management
- Process Improvement: Capability maturity, metrics, and process assessment
- Professional Practice: Documentation, ethics, team dynamics, and career
Note: This topic covers process-level and management-level practices. For code-level practices (clean code, design patterns, testing at the unit level), see the Programming topic. For distributed system architecture and scalability, see the System_Design topic.
Lessons¶
| # | Title | Description |
|---|---|---|
| 01 | What Is Software Engineering | Definition, scope, history, software characteristics, professional roles |
| 02 | Software Development Life Cycle | Waterfall, V-Model, spiral, incremental, RAD, prototyping, model selection |
| 03 | Agile and Iterative Development | Agile Manifesto, Scrum, Kanban, XP, Lean, scaling agile, metrics |
| 04 | Requirements Engineering | Elicitation, functional vs non-functional, use cases, user stories, traceability |
| 05 | Software Modeling and UML | UML diagrams, class, sequence, activity, state, use case diagrams |
| 06 | Estimation and Planning | Story points, Planning Poker, COCOMO, function points, scheduling, risk |
| 07 | Software Quality Assurance | Quality models, SQA activities, reviews, audits, defect metrics |
| 08 | Verification and Validation | V&V strategies, testing levels, test planning, static vs dynamic analysis |
| 09 | Configuration Management | Version control strategy, branching, change management, release management |
| 10 | Project Management | Scheduling, WBS, critical path, risk management, stakeholder communication |
| 11 | Software Maintenance and Evolution | Maintenance types, legacy systems, refactoring at scale, technical debt |
| 12 | Process Improvement | CMMI, ISO 15504, metrics, retrospectives, continuous improvement |
| 13 | DevOps and CI/CD | DevOps culture, pipelines, infrastructure as code, monitoring, SRE |
| 14 | Technical Documentation | Architecture docs, ADRs, API docs, runbooks, documentation as code |
| 15 | Team Dynamics and Communication | Team structures, Conway's Law, communication patterns, code review culture |
| 16 | Ethics and Professionalism | ACM/IEEE codes, intellectual property, privacy, AI ethics, career growth |
Prerequisites¶
- Basic programming knowledge: Experience writing code in at least one language
- Familiarity with version control: Basic Git usage (see the Git topic)
- Exposure to a software project: Having worked on any software project, even a personal one
No deep expertise is required. This topic is accessible to developers transitioning to larger teams or to those wanting to understand the discipline behind software production.
Learning Path¶
The lessons are organized into four progressive tiers:
Tier 1 — Foundations (Lessons 1–3) Understand what software engineering is, how development processes are structured, and how agile methods work in practice. These lessons provide the conceptual foundation for everything else.
Tier 2 — Building Software (Lessons 4–8) Learn how to gather requirements, model systems, plan and estimate work, assure quality, and rigorously verify that software meets its goals.
Tier 3 — Managing Software (Lessons 9–12) Configuration management, project management, software evolution, and process improvement. These are skills that matter most as projects grow larger and teams expand.
Tier 4 — Modern Practice and Professionalism (Lessons 13–16) DevOps, documentation, team dynamics, and ethics — the practices that define mature engineering organizations and professional engineers.
Example Code¶
Illustrative scripts and configuration files for CI/CD pipelines, project planning tools, and process automation are available in examples/Software_Engineering/.
Related Topics¶
- Programming: Code-level practices — clean code, design patterns, TDD, refactoring, architecture patterns
- System_Design: Large-scale distributed system design, scalability, reliability, observability
- Git: Version control mechanics and workflows
- Docker: Containerization and deployment
- MLOps: ML-specific development and operational practices
- Database_Theory: Data management, transactions, and database design
License: Content licensed under CC BY-NC 4.0