How a feature travels from idea to production
On This Lesson 11 topics
Lesson Overview
A feature is one piece of behavior that users or other systems can notice: "show an estimated delivery time", "let customers reorder a past order", "refuse a coupon bigger than the cart". Every feature in every app you use started as an idea in someone's head and then travelled through a team before it reached real users.
In this lesson you will follow one feature along that path. The stations are: idea, requirements, design, code, review, test, release, and monitor. At each one you will see what happens, who is involved, and what can go wrong. You will also learn why two habits matter so much in modern teams: automatic tests on every change, and small, frequent releases.
The picture for this module is the house. Think of a conveyor belt in a factory with one station per step. The feature sits on the belt and each station adds something or checks something. If a station finds a defect, the feature goes back up the belt. In real teams the belt is not one-way, and later steps often send work back to earlier ones. That is the loop you met in the software lifecycle lesson.
Why this matters: when you start a job, your first tasks will be a small piece of this belt: reading a ticket, changing some code, and getting your change reviewed and released. Knowing the whole path helps you understand why teams insist on reviews, tests, and small steps, and what you are expected to do at each point.
This lesson builds on the roles from lesson 2 (who does what) and on the lifecycle from the previous module (the seven stages). The same ideas now appear at the scale of one feature rather than a whole product.
A caution before we start. Teams differ a great deal: some do every station in one afternoon, others take months, and some skip or merge stations. What follows is a common and simplified path. Tool names such as Git, pull requests, and pipelines are mentioned briefly here and are taught properly later in the course; you do not need to use them yet.
Learning Objectives
By the end of this lesson you will be able to:
- Name the stations a feature passes through: idea, requirements, design, code, review, test, release, monitor.
- Describe what happens at each station and which role is usually involved.
- Explain what a code review is and why a teammate reviews code before it is merged.
- Explain what automatic tests are and why they run on every change.
- Explain why small, frequent releases are generally safer than big ones, and what "watching" a release means.
- Describe how a failure at a late station sends work back to an earlier one.
- Describe the path of one feature in your own words, using a concrete example.
Written Explanation
The path in one picture
Idea -> Requirements -> Design -> Code -> Review -> Test -> Release -> Monitor
^ |
+----------------- feedback, bugs, new ideas --------------------------+We will follow one feature through all eight stations: "show the estimated delivery time on the order confirmation" for a food-ordering backend.
Station 1: Idea
A feature starts with a need. It might come from a customer ("I never know when the food will arrive"), from support ("we get fifty messages a day asking where the order is"), from the business ("late deliveries lose us customers"), or from the team ("our notifications are confusing").
At this station, nobody has written anything yet. The goal is to decide whether the idea is worth pursuing. A good idea is stated as a problem: "customers do not know when their food will arrive". A bad one is stated as a solution too early: "add a clock widget". The previous lesson's habit applies: ask what problem we are solving.
Station 2: Requirements
Requirements say what the feature must do, clearly enough that everyone, including people who will test it, can agree whether it works. You met this stage in the lifecycle lesson.
For our example, requirements could be:
- The order confirmation shows an estimated delivery time, in minutes, for the customer's address.
- The estimate must be a whole number of minutes between 15 and 90. (If the real calculation is outside that range, show the nearest limit.)
- If the restaurant is closed, the order is refused with a clear message instead of an estimate.
- The estimate must appear within one second of confirming the order.
Notice each line can be checked: either the screen shows the number or it does not. Vague requirements like "make delivery times better" cannot be tested. A requirement is also a chance to ask questions: what happens when the courier is late? Does the customer see the estimate again later? Every question answered now saves a change later.
People involved: someone who owns the product (often called a product manager or product owner), engineers, and sometimes support staff or designers.
Station 3: Design
Design answers: how will it work? Before writing code, the team decides on the main parts of the change. For our feature:
- Which service calculates the estimate? (The backend, because it knows the courier availability.)
- What information does the calculation need? (The restaurant's cooking time, the distance, and the current number of waiting orders.)
- What does the frontend ask for, and what does the backend answer? (Say, the request carries the order, and the response includes an estimate in minutes.)
- Where could it fail? (The courier system is slow or unavailable: do we show a default estimate or none?)
Design can be a ten-minute whiteboard talk for a small change or a written proposal for a large one. What matters is that the team agrees on the big decisions before writing code, because moving a box on a drawing is cheap and rewriting finished code is not. The architect or most experienced engineer often helps here, but any engineer can propose a design.
Station 4: Code
Now the engineer writes the code. In this lesson, that is not the longest station, even though many beginners think of it as the whole job.
A typical routine, described here briefly because it is taught in later modules:
- The engineer works on the change in their own separate copy of the project, usually a branch in a version control system such as Git. A branch lets someone work on a change without disturbing teammates, who keep working on the main version.
- The engineer writes the code for the feature, and also the tests that prove it works (see below).
- They run the program and the tests on their own computer.
Code is written for the reader (lesson 1): clear names, small pieces, and a short comment where the reason is not obvious.
Station 5: Review
When the change is ready, the engineer asks teammates to look at it before it joins the main version. In many teams this is done with a pull request: a proposal to merge the changes into the project, which gives collaborators a place to discuss and review the change first. GitHub's documentation describes it in those terms: a pull request lets people review the proposed change and see automatic check results, and it shows whether anything blocks the merge, such as missing approvals.
A code review means a teammate reads the change and gives feedback. They might ask: Does it do what the requirements say? Is it understandable? Does it handle the unusual cases? Is it safe, for example with personal data? Does it fit the design?
Why do teammates review? Two main reasons:
- To catch mistakes early. A second pair of eyes sees what the author is blind to. A mistake found in review is cheaper than one found in production.
- To share knowledge. Reviewing teaches the reviewer about this part of the system, and the author learns better ways to do things. Afterwards, more than one person understands the code.
Reviews go best when feedback is about the code, not the person, and when the author reads comments as help. A review is a conversation: the author may explain, change, or politely disagree. When everyone is satisfied, the change is merged, which means it becomes part of the main version.
Station 6: Test
Testing happens throughout, but there is a distinct moment where the change is checked as a whole. Two types matter here:
- Automatic tests are small programs that check the software and report pass or fail. They run on a server whenever someone proposes or merges a change. This practice is called continuous integration (CI): changes are merged into the shared code frequently, and every merge triggers an automatic build and tests, so integration problems appear within minutes or hours instead of weeks.
- Manual checks by a QA engineer or by the team: trying the feature in a test environment like a real user would, and looking for odd cases.
A test environment is a separate copy of the application, with fake data, where the team can try changes safely. It prevents a bad change from touching real customers' orders.
For our feature, tests would cover: a normal estimate, an estimate below 15 (shown as 15), an estimate above 90 (shown as 90), a closed restaurant, and the courier system being unavailable.
If a test fails, the change goes back to the code station. This is not a failure of the team; it is the system doing its job. Finding the problem here costs minutes. Finding it after release costs much more.
Remember what testing cannot do: it can show that problems exist, but passing tests do not prove there are none. That is why the next two stations exist.
Station 7: Release
Release means putting the new version where real users can use it. For a backend, this means putting the new instructions onto the production servers and starting them, often called deploying. In many teams the release is carried out by an automatic pipeline (lesson 2): the same steps run every time, in the same order, without human typing mistakes.
Teams reduce the risk of a release in several ways:
- Small releases. Releasing one small change is easier to understand and to undo than releasing hundreds of changes at once. If something breaks, there are only a few suspects. Frequent integration and shorter release cycles are common themes in descriptions of DevOps practice, including Microsoft's.
- Careful rollout. Instead of switching everyone at once, a team may send the new version to a small share of users first, and widen it if all looks well. The SRE book describes progressive rollouts and fast, safe rollbacks as a way to limit damage.
- A way back. A rollback puts the previous version back quickly if the new one misbehaves.
The strict word choice does not matter yet. What matters is the idea: make the release step safe and boring.
Station 8: Monitor
After release, the work is not finished. The team monitors the feature: it watches signs that it is working. Monitoring typically includes:
- Errors: is the service returning failures?
- Speed: is the estimate still shown within one second?
- Behavior: are customers using the feature? Are support messages about delivery time falling?
- Feedback: what do users and support say?
In our example, the team notices that estimates for one district are always 15 minutes, because a missing distance defaults to zero. Support also reports that customers want to see the estimate again later. Both findings are new ideas and bugs: they re-enter the belt at the first station. The loop turns.
Monitoring is often shown on a dashboard (a screen of charts) and connected to alerts (automatic messages when something crosses a limit). Later modules show how to build this. For now, remember: shipping is not the end; watching is the last station and the first one of the next cycle.
Why small, frequent releases are safer
Compare two teams:
- Team A releases once every three months, with hundreds of changes at once. If the new version has a problem, nobody knows which of the hundreds of changes caused it. Fixing it takes days, and meanwhile users are affected.
- Team B releases every day or several times a day, with a few changes at a time. If there is a problem, the suspects are the few changes released today, and a rollback is simple.
The size of the change drives the risk. Smaller changes are easier to review, easier to test, easier to understand, and easier to undo. This is one reason teams invest in automatic tests and pipelines: they make frequent releases possible. I describe this as a general principle supported by the CI and DevOps literature; the exact release frequency that suits a team depends on the product and its risks.
Loops and shortcuts
Real work does not move in a straight line:
- A reviewer finds a design problem, so the change goes back to design.
- A test failure sends the code back for fixing.
- A monitor alert after release sends the team into an urgent fix, often with a faster review, but never with no checks at all.
Be suspicious of teams that skip stations to move faster. Skipping review or testing mostly moves the cost to production, where it is higher. What teams can do is make each station faster: smaller changes, automation, and clear requirements.
Examples
Example 1: a small text change (simple)
The support team notices that the error message "Err 17" confuses customers. The change: replace it with "We could not find a restaurant near this address."
- Idea: from support complaints.
- Requirements: the message is shown whenever no restaurant serves the address.
- Design: none needed beyond finding the place where the message appears.
- Code: one line.
- Review: a teammate checks that the message is correct and that no other place uses the old text.
- Test: an automatic test checks that the message appears for an address with no restaurant.
- Release: done by the pipeline the same day.
- Monitor: the team watches whether support messages about this error fall.
Even a one-line change passes through every station. The stations just take minutes.
Example 2: the delivery time feature (practical)
Follow the feature from the explanation in a timeline. The durations are invented to show the shape; real teams vary widely.
| Day | Station | What happens |
|---|---|---|
| Mon | Idea | Support reports many "where is my food?" messages |
| Mon | Requirements | Product owner and an engineer write the four requirements |
| Tue | Design | Backend and frontend engineers agree on the request and response; the architect reviews how the courier system is called |
| Tue-Wed | Code | Backend engineer builds the calculation and tests; frontend engineer shows the number on the screen |
| Thu | Review | Two teammates review; one points out that a missing distance is treated as zero. The author fixes it and adds a test |
| Thu | Test | Automatic tests pass; QA tries a closed restaurant and an address with no courier |
| Fri | Release | The pipeline releases first to a few users, then to everyone |
| Fri onward | Monitor | The team watches the error rate and the speed of the new call, and reads support messages |
A defect was caught in review (Thursday) instead of production. Notice also that the frontend and backend work in parallel after the Tuesday agreement.
Example 3: a problem found in production (realistic)
Two weeks later, monitoring shows that the "estimate" call is slow every evening around 7 p.m. and orders fail during that time.
- Monitor: an alert fires: the call takes more than one second. The person on call looks at the dashboard and sees the courier system is slow.
- Respond: the team decides to show a default estimate when the courier system is slow, rather than waiting. This is a fast fix released in a small change.
- Review and test: a teammate reviews the change quickly, and an automatic test checks the default is used when the courier call takes too long. The review is faster, not skipped.
- Release and watch: released to a few users first, then everyone. The alert stops.
- Learn: afterwards, the team writes a short note about what happened, adds a requirement ("the estimate never blocks ordering"), and a test for it.
Here is a small, runnable Java method that captures the rule from the first set of requirements (the estimate must be between 15 and 90 minutes), together with a tiny check of it. You do not need to understand every line yet; read the method name and the comments.
public class DeliveryEstimate {
// Keeps the estimate between 15 and 90 minutes.
static int clampMinutes(int rawMinutes) {
if (rawMinutes < 15) {
return 15;
}
if (rawMinutes > 90) {
return 90;
}
return rawMinutes;
}
public static void main(String[] args) {
System.out.println(clampMinutes(5)); // prints 15
System.out.println(clampMinutes(40)); // prints 40
System.out.println(clampMinutes(200)); // prints 90
}
}An automatic test would do the same thing as main here, but report pass or fail by itself on every change. Notice that these three checks come directly from the requirement, so the requirement made the test easy to write.
Backend Insight
Each station has a particular meaning for a backend engineer:
- Requirements and design. The backend decides what its answers look like, which other systems it calls, and what happens when they fail. Mistakes here are expensive because other teams and programs depend on them.
- Code. Backend code usually runs for a long time and serves many users. Clear names and small pieces make it possible to change safely.
- Review. Backend reviews pay special attention to data: could this change lose, duplicate, or expose someone's data?
- Test. Automatic tests are especially valuable for rules about money, stock, and permissions, because these are costly to get wrong and easy to break during later changes.
- Release. A backend is used all the time, so changing it must not interrupt users. Teams use careful rollouts and rollbacks, and check that old and new versions can run together for a while.
- Monitor. You cannot see a backend, so it must report its own health: errors, speed, and how often features are used. The people who watch these signals, including you, need them to be meaningful.
On a typical first day of work you will meet exactly this path: a ticket, a branch, a pull request, a failed or passed check, a review, a release, and a dashboard. The demo in the last lesson of this module walks through such a day.
Common Mistakes
Mistake 1: Treating "code" as the whole path
- Incorrect: "My part is finished once the code runs on my computer."
- Correct: "My part is finished when the change has been reviewed, tested, released, and watched."
Mistake 2: Skipping review or tests to go faster
- Incorrect: "It is a tiny change. We will skip the checks."
- Correct: "It is a tiny change, so the checks will be quick. We run them anyway."
Small changes cause outages too. The checks are what make speed safe.
Mistake 3: Making large, rare releases
Large batches are harder to review, harder to test, and harder to undo. Prefer small changes released often, and use techniques such as careful rollouts to reduce risk.
Mistake 4: Taking review feedback personally
A review is about the code, not about the author. The goal is to catch mistakes early and share knowledge. When you review, comment on the code and explain why. When you are reviewed, assume the reviewer wants the change to succeed.
Mistake 5: Ignoring the end of the path
- Incorrect: "The release worked, so we can forget about it."
- Correct: "We watch errors, speed, and feedback after release, and use what we learn as the next idea."
Exercises
Try each exercise yourself before opening the solutions.
Level A: Foundation
A1. Write the eight stations from idea to monitor, in order.
Show solution A1
A1. Idea, requirements, design, code, review, test, release, monitor.
A2. In one sentence, say why a teammate reviews code before it is merged.
Show solution A2
A2. To catch mistakes early and to share knowledge, so more than one person understands the code.
A3. What is an automatic test, and when does it run?
Show solution A3
A3. An automatic test is a small program that checks the software and reports pass or fail. It runs automatically on a server whenever a change is proposed or merged (continuous integration), and the author can also run it on their own computer.
Level B: Application
B1. A ticket says: "Let customers cancel an order within five minutes." Write four testable requirements for it.
Show solution B1
B1. Example requirements: (1) A customer can cancel an order within five minutes of placing it. (2) After five minutes the cancel request is refused with a clear message. (3) A cancelled order is not sent to the restaurant, or the restaurant is told to stop. (4) The customer is refunded in full for a cancelled order. Each can be checked as true or false.
B2. For the feature in B1, say what you would check at each of these stations: design, review, test, monitor. One sentence each.
Show solution B2
B2. Design: decide where the "five minutes" is measured (on the server, from when the order was stored) and what happens if the restaurant already started. Review: check that someone cannot cancel another person's order, and that the refund cannot be issued twice. Test: automatic tests for cancel at 4 minutes, cancel at 6 minutes, cancel twice, cancel someone else's order. Monitor: watch the number of cancellations and refund failures, and any rise in errors.
B3. A reviewer asks you to rename a variable called d to deliveryFee. Explain what you gain, and what is a good way to answer the comment.
Show solution B3
B3. Gain: the name says what the number is, so the next reader understands it. A good answer is a short "Done, thanks", or, if you disagree, a respectful explanation. Not ignoring the comment, and not arguing about it for an hour.
Level C: Challenge
C1. A team releases once every two months, with about 200 changes in each release. After one release, the checkout fails for some users. Explain why finding the cause is hard, and describe two changes to the team's habits that would make future problems easier to find.
Show solution C1
C1. With 200 changes in one release, there are 200 suspects, and each change interacts with the others, so it takes long to find which one is guilty. Users are affected while the team searches, and undoing it means undoing all 200. Better habits: release small changes much more often (even daily), so that few suspects exist; run automatic tests on every change; use careful rollouts with fast rollback; and monitor after each release. Any two sensible habits with reasons are correct.
C2. Trace one of these features through all eight stations, inventing plausible details: "show a customer's last five orders" or "send an email when an order is delayed". Mark one place where work may go back to an earlier station, and say why.
Show solution C2
C2. Example (email on a delayed order): Idea: customers complain they learn about delays too late. Requirements: send one email when the estimate is exceeded by 15 minutes; do not send for cancelled orders. Design: a background job on the backend checks orders and asks an email service to send. Code: write the job on a branch. Review: a teammate asks what happens if the job runs twice (the customer might get two emails). Test: automatic tests for delayed, on-time, cancelled, and run-twice. Release: a small rollout. Monitor: count the emails sent and the failures. The review comment about running twice sends work back to design/code, because the job needs a way to remember which orders it already handled.
Mini Challenge
Choose a small feature you would like in an app you use (for example "a dark mode", "a reminder before an appointment", or "a search filter"). Write a one-page "journey" for it with eight headings (the eight stations). Under each heading write one to three sentences using concrete details. Add:
- Two testable requirements.
- One question a reviewer would plausibly ask.
- What you would watch after release, and one sign that would make you roll the change back.
- One example where a later station sends work back to an earlier one.
Check your work: all eight stations are present, your requirements can be answered with yes or no, and you did not stop at release. You are inventing the details, so keep them plausible rather than claiming how a real company works.
Summary & Next Lesson
Key takeaways
- A feature travels through idea, requirements, design, code, review, test, release, and monitor, and often loops back.
- Requirements must be checkable. Design finds big mistakes while they are cheap.
- Teammates review code to catch mistakes early and to share knowledge.
- Automatic tests run on every change, so problems surface within minutes, as in continuous integration.
- Small, frequent releases are easier to review, test, understand, and undo than big, rare ones.
- After release the team keeps watching; what it learns becomes the next idea.
Next lesson
You have seen the path a feature takes. The next lesson, "Your career map: the eight levels of this course", steps back from one feature and shows the path you will take from Beginner to Solution Architect, and what each level adds.
Self-check
- List the eight stations in order.
- Why is a code review done before merging?
- What does continuous integration do?
- Why are small releases generally safer than big ones?
- What happens to a problem found by monitoring after release?
Show answers
- Idea, requirements, design, code, review, test, release, monitor.
- To catch mistakes early and share knowledge.
- It merges changes into the shared code often and runs an automatic build and tests on each merge, so problems appear quickly.
- A small change has few suspects if something goes wrong, is easier to review and test, and is easier to undo.
- It becomes a new idea or bug and enters the path again at the first stations, so the loop continues.
References
- GitHub Docs, About pull requests. Supports the description of a pull request as a proposal to merge changes that lets collaborators review and discuss them first, with automatic checks and merge blockers shown on the page.
- Martin Fowler, Continuous Integration. Supports the description of frequent merging with an automatic build and tests so that integration problems surface early, and the argument that small, frequent integration lowers risk.
- Microsoft Learn, What is DevOps?. Supports the points that shorter release cycles make planning and risk management easier, and that monitoring of running software feeds into later development.
- Betsy Beyer et al. (eds.), Site Reliability Engineering, chapter 1 "Introduction". Supports the mention of progressive rollouts, fast problem detection, and safe rollbacks.
- The eight-station path, the delivery time feature, the timeline, and the 7 p.m. incident are this lesson's own teaching illustrations, not data from a specific company. Teams differ in the stations they use and how long each takes. I did not verify a specific recommended release frequency, so none is given.
Practice
Apply this lesson with the module's lab, exercises and quiz.
Marking a lesson complete is optional and you can undo it any time. Your progress stays in this browser.