Software Engineering Roadmap
A structured path from programming fundamentals through object-oriented design, software architecture, backend development, testing and delivery.
Suggested duration: 6–12 months
Roadmap Overview
This roadmap develops the skills needed to design, implement, test and maintain software systems. It begins with programming fundamentals, then builds object-oriented reasoning and problem decomposition. From there, it moves into design principles, architectural boundaries, backend interfaces, persistence, quality attributes and production practices. The sequence is a guide rather than a fixed calendar: progress when you can explain and apply the concepts, not merely when a week has passed.
Learning progression
Work through each stage
Complete the learning outcomes and practice tasks before moving forward. The sequence is intended to build on earlier knowledge.
- Stage 018 topics
Stage 01 — Programming Fundamentals
Learn to express solutions as programs and understand how execution, data and control flow fit together.
Topics to study
Variables and TypesOperatorsControl FlowFunctionsCollectionsExceptionsFile I/ODebuggingLearning outcomes
- ✓Break a problem into smaller operations and functions.
- ✓Choose appropriate data types and collections.
- ✓Trace execution and diagnose common errors.
- ✓Read and write files while handling expected failures.
Suggessted practice
Build small command-line programs such as a file analyser, text statistics tool or task tracker. Add input validation and meaningful error messages.
- Stage 0210 topics
Stage 02 — Data Structures and Problem Solving
Choose data structures based on the operations a program needs and reason about the cost of those operations.
Topics to study
ArraysLinked ListsStacksQueuesHash TablesTreesGraphsSortingSearchingBig-OLearning outcomes
- ✓Explain time and space complexity for common operations.
- ✓Choose a collection based on lookup, insertion and traversal needs.
- ✓Implement and test basic algorithms.
- ✓Recognise when a simpler built-in collection is preferable to a custom structure.
Suggessted practice
Solve a range of problems using arrays, maps, stacks, queues and trees. Explain the complexity of each solution rather than only presenting the code.
- Stage 038 topics
Stage 03 — Object-Oriented Programming
Organise behaviour and state around clear responsibilities, abstractions and collaborations between objects.
Topics to study
Classes and ObjectsEncapsulationAbstractionInheritancePolymorphismInterfacesCompositionGenericsLearning outcomes
- ✓Design classes with cohesive responsibilities.
- ✓Use interfaces to describe behaviour contracts.
- ✓Prefer composition when it models collaboration better than inheritance.
- ✓Explain dynamic dispatch and polymorphic behaviour.
Suggessted practice
Model a small library, shopping cart or task domain. Refactor duplicated conditional logic into abstractions only when the domain variation justifies it.
- Stage 0412 topics
Stage 04 — Software Design Principles and Patterns
Learn to manage dependencies, isolate change and choose patterns according to the design problem rather than memorising class diagrams.
Topics to study
SOLIDDRY and KISSComposition over InheritanceFactory MethodBuilderAdapterDecoratorFacadeProxyCompositeBridgeFlyweightLearning outcomes
- ✓Identify responsibilities and unstable dependencies.
- ✓Explain the intent, participants and trade-offs of common GoF patterns.
- ✓Refactor a concrete design problem using a pattern when appropriate.
- ✓Recognise when a pattern adds unnecessary indirection.
Suggessted practice
Implement one small Java example for each pattern and write down the problem it solves, the collaboration between participants and the cost introduced by the solution.
- Stage 0510 topics
Stage 05 — Application Architecture and APIs
Translate requirements into modules, API contracts and clear boundaries between transport, business rules and infrastructure.
Topics to study
Functional RequirementsQuality AttributesLayered ArchitectureModular MonolithRESTDTOsValidationError HandlingAuthenticationAuthorisationLearning outcomes
- ✓Separate functional requirements from quality attributes and constraints.
- ✓Design resource-oriented HTTP endpoints and response contracts.
- ✓Separate controllers, services, repositories and persistence models.
- ✓Enforce authentication and resource-level authorisation on the server.
Suggessted practice
Design a task-management API. Write the requirements first, then create endpoint contracts, DTOs, service operations and a domain model before expanding the implementation.
- Stage 0610 topics
Stage 06 — Databases and Data Integrity
Model persistent data, enforce relationships and make multi-step operations correct under failure and concurrency.
Topics to study
Relational ModellingPrimary and Foreign KeysNormalisationIndexesTransactionsConnection PoolsN+1 QueriesPaginationMigrationsBackupsLearning outcomes
- ✓Design one-to-many and many-to-many relationships.
- ✓Use constraints and transactions to protect data integrity.
- ✓Analyse indexes and query plans against real access patterns.
- ✓Choose offset or keyset pagination based on scale and ordering needs.
Suggessted practice
Create a PostgreSQL schema for users, projects, memberships, tasks and comments. Add constraints, indexes for common queries and tests for transaction rollback.
- Stage 079 topics
Stage 07 — Testing, Security and Reliability
Verify expected behaviour and protect the system from invalid input, unauthorised access and partial failure.
Topics to study
Unit TestingIntegration TestingTest DoublesPassword HashingJWT or SessionsInput ValidationResource AuthorisationIdempotencyOptimistic LockingLearning outcomes
- ✓Test business rules independently from infrastructure.
- ✓Test endpoint behaviour with valid and invalid identities.
- ✓Prevent plaintext password storage and enforce backend permissions.
- ✓Reason about retries, duplicate requests and concurrent updates.
Suggessted practice
Add tests for project ownership, task assignment, invalid transitions, duplicate requests and concurrent updates. Include negative security tests, not only successful paths.
- Stage 0810 topics
Stage 08 — Delivery and Operations
Package, deploy and observe software so it can be run and maintained outside a developer's machine.
Topics to study
GitCIDockerEnvironment ConfigurationReverse ProxyHealth ChecksLogsMetricsTracesCloud DeploymentLearning outcomes
- ✓Build reproducible application artifacts and containers.
- ✓Configure environment-specific settings without committing secrets.
- ✓Expose health information and useful operational signals.
- ✓Explain deployment, rollback and recovery considerations.
Suggessted practice
Containerise the task API, run it with PostgreSQL and Redis through Docker Compose, then add health checks, structured logs and telemetry before deploying it.
How to use this roadmap
For each stage, learn the concept, implement a small example, inspect how a real codebase applies it and record the trade-offs you observe. Avoid jumping directly to distributed systems or microservices before you can structure a maintainable single application. A strong engineering foundation is built by connecting programming, data modelling, design and operations.
What completion should look like
By the end, you should be able to take a set of requirements, identify domain concepts, design a reasonable application structure, implement APIs, persist data safely, test important behaviour and explain how the application can be deployed and observed. The portfolio projects in Engineering Atlas can provide practical checkpoints for these skills.
Expected outcomes
- ✓Build maintainable applications with explicit responsibilities and boundaries.
- ✓Design APIs and database schemas from requirements.
- ✓Apply design patterns intentionally and explain their trade-offs.
- ✓Test security, persistence and failure behaviour.
- ✓Package and operate an application with repeatable deployment practices.