Skip to content
Forgestead

Pre-release. Stages 1 to 4 of the Java and Spring Boot track are written.

Learn software engineering by building one real system.

Start with a small Java program and keep going until it's an online shop with a database, a secure API, tests, caching, messaging and a deployment pipeline. Each concept arrives when the shop needs it, and you write the code yourself.

01How it works

Concepts show up when the code needs them

Nothing is taught in a vacuum. The shop grows one feature at a time, and every feature brings the ideas it depends on.

The problem first
Each lesson opens with a problem the shop has right now: prices that round wrong, orders that vanish on restart. Then it explains the idea behind the fix, how it works underneath, and when it's the wrong tool.
Your code, real tests
You write the code in a real editor, against the same tests the reference solution passes. If you get stuck, open the reference solution next to your own.
Bugs on purpose
Some lessons hand you a bug instead of a feature: a wrong refund, a report that got slow, an import that silently changed nothing. You find the cause, fix it, and prove the fix with a test.
Decisions explained
Every big decision comes with its reasoning and the alternatives, and some are exercises: pick an approach for the shop, give your reasons, and see how they hold up.

02A lesson

Ten parts, always in the same order

You always know where you are. Read the theory first, or go straight to the code and come back when something doesn't make sense.

  1. 1

    Problem and context

    What the shop needs and why it needs it now.

  2. 2

    Theory

    How it works inside, when to use it, common mistakes.

  3. 3

    Syntax and code

    Small examples you can run before touching the project.

  4. 4

    Architecture

    Where the change sits in the system, with a diagram.

  5. 5

    Implementation

    Step by step, in your editor.

  6. 6

    Testing

    The tests that define done, and how to write the next one.

  7. 7

    Debugging

    A real failure, the real error output, and how to trace it.

  8. 8

    Decisions

    Why the reference does it this way, and what else would work.

  9. 9

    Practice

    Tasks with no instructions, to check it stuck.

  10. 10

    Summary

    Concepts, files and techniques, as revision notes.

03Three kinds

Lessons, challenges and bugs

Most lessons teach. Challenges check that it stuck, with only requirements and tests. Debugging scenarios hand you a broken shop.

ComparedLessonChallengeDebugging
In stages 1–3521313
What you getTen parts, from the problem to the summary, and starter code with the gaps markedA brief, requirements and acceptance criteria. No steps.A symptom from production, the logs and output, and the code that causes it
The reference solutionOpen it next to your code whenever you like, with notes on the lines that matterLocked until your code passes, or until you ask for itThe root cause and the fix are its last two parts, for when you've looked
Hints—One at a time, if you want them—

04Debugging

Debugging is part of the course, not an accident

Thirteen scenarios so far, each from the shop you're building. Every one comes with the real error output, and ends with a test that proves the fix.

From Two orders, one payment: the error, then the rows that cause it
org.springframework.dao.IncorrectResultSizeDataAccessException:
  Incorrect result size: expected 1, actual 2

 id | payment_reference |  region  |       placed_at
----+-------------------+----------+------------------------
  1 | PAY-1             | DOMESTIC | 2026-11-09 09:00:00+00
  2 | PAY-1             | EU       | 2026-11-10 09:00:00+00
  1. The missing item
  2. The stock that moved
  3. The wrong refund
  4. Reservations that vanish
  5. Everything half price
  6. The silent import
  7. The slow report
  8. The shop that wouldn't start
  9. The deal that never applied
  10. Someone else's keyboard
  11. When the pager is down
  12. The search that found everything
  13. Two orders, one payment

05Curriculum

One shop, eight stages

The same codebase from the first lesson to the last. You don't start over when the topic changes; you change the system you already have, which is what the job is actually like.

  1. 1

    Programming foundations

    A product catalogue in plain Java: classes, records, collections, exceptions.

    Written

  2. 2

    Spring Boot foundations

    The catalogue becomes a Spring application, with configuration, tests and events.

    Written

  3. 3

    Database engineering

    Products and orders move into PostgreSQL, with migrations, transactions and indexes.

    Being written

  4. 4

    Backend development

    A REST API with validation, error handling, JWT authentication and API docs.

    Planned

  5. 5

    Software architecture

    A modular monolith with boundaries you can explain and defend.

    Planned

  6. 6

    Advanced backend engineering

    Caching, concurrency, and order processing through a message broker.

    Planned

  7. 7

    Distributed systems

    A few modules become services, with a gateway, sagas and circuit breakers.

    Planned

  8. 8

    Production engineering

    Docker, Kubernetes, CI/CD, and the metrics, logs and traces to run it.

    Planned

A stage opens when every lesson in it is written and every test passes. Not before.

06Your code

Your code leaves with you

Download any milestone, your code or the reference, as an ordinary repository. It builds with the Maven wrapper on any machine with Java, and has its own README, decision log, tests and CI workflow. It doesn't need Forgestead to run. Changed it elsewhere? Import it back.

  • spring-boot-ecommerce
  • README.md# what you built, how to run it
  • mvnw# fetches Maven for you
  • pom.xml
  • .github/workflows/ci.yml# tests on every push
  • docs/DECISIONS.md# why the code looks this way
  • src/main/java/shop
  • Cart.java
  • Receipt.java
  • src/test/java/shop# the lessons' tests
  • .forgestead.json# lets you import it back

07What's next

One finished track before the next one starts

One complete course before ten half-written ones. Software Engineering is first; the others follow, in this order.

  1. Software Engineering

    Java and Spring Boot first; C#, Go, Rust, Python and Node.js after

    In development

  2. AI and Machine Learning

    Data science, deep learning, LLM engineering, MLOps

    Planned

  3. DevOps and Cloud

    Linux and networking, Docker and Kubernetes, CI/CD, infrastructure as code

    Planned

  4. System Design

    Caching and scaling, messaging, replication and consistency

    Planned

Make an account and start with the first lesson

Your progress, code and exports live in your account. It's free while the course is in pre-release.

Create an account