Mid-sprint requirement injection
Unlocks after 24 hours
The requirement details remain hidden until after 24 hours. Continue with the base specification until this section unlocks.
Implement reusable middleware with fixed window and token bucket algorithms, correct HTTP rejection signals, configurable route policies and a Redis-backed production store.
Duration
2 days
Format
Solo
Review
Required
Base brief
11 requirements
Project summary
TYPE: BACKEND MIDDLEWARE LIBRARY
DURATION: 2 DAYS
DELIVERY: SOLO
REVIEW: MANDATORY PEER REVIEW
This page is the source of truth for the project. Where a summary and an acceptance criterion differ, follow the acceptance criterion.
Problem context
You have joined a software team whose APIs keep getting overwhelmed. One client’s runaway script can hit an endpoint thousands of times per minute and degrade the service for everyone else. Scrapers and brute-force attempts go unchecked, and each service tries to solve the problem differently—or not at all. Production runs several service instances, so counters stored inside one process cannot enforce a global limit.
Required outcome
Build reusable rate-limiting middleware that caps requests per caller, rejects excess traffic with the correct HTTP status and headers, supports two algorithms, and remains correct when several service instances process concurrent requests through shared Redis state.
Architecture boundary
The limiter must run before every protected route handler. It identifies the caller, loads the route policy, performs one atomic state decision using the selected store, and either forwards the request or returns 429 with correctly computed headers.
Required data path
Request
protected route
Middleware
before handler
Identify
caller key
Policy
algorithm + limit
Atomic state
memory / Redis
Result
handler / 429
Learning objectives
Implement and compare two rate-limiting algorithms
Design middleware with configurable caller and route policies
Coordinate distributed state through Redis
Guarantee correct decisions under concurrent requests
Base specification
All acceptance criteria are mandatory unless an injected requirement explicitly changes them. Expand each requirement to read the complete criteria.
Phase 01
3 requirements
Acceptance criteria
Acceptance criteria
Acceptance criteria
Phase 02
1 requirements
Acceptance criteria
Phase 03
2 requirements
Acceptance criteria
Acceptance criteria
Phase 04
2 requirements
Acceptance criteria
Acceptance criteria
Phase 05
1 requirements
Acceptance criteria
Phase 06
2 requirements
Acceptance criteria
Acceptance criteria
Injected requirements
Additional requirements are released during the project. Once a requirement is released, it becomes mandatory and is included in the grading criteria. Check this section at the indicated release time.
Mid-sprint requirement injection
The requirement details remain hidden until after 24 hours. Continue with the base specification until this section unlocks.
Release times are calculated from the public campaign start date. All participants receive each injected requirement at the same time.
Technical rules
These constraints are assessed alongside functional behavior. A solution that bypasses them does not meet the specification.
Suggested build order
You may use a different sequence, but all requirements, tests, documentation and peer review are due by the end of Day 7.
01 / 06
02 / 06
03 / 06
04 / 06
05 / 06
06 / 06
Submission checklist
The implementation alone is not a complete submission. Provide the following evidence so another engineer can run, test and evaluate the system.
Documentation structure
Use these headings so another developer can find every required explanation and command.
Evaluation
Mandatory peer review
The reviewer should ask these questions and inspect the code, tests and runtime evidence supporting each answer. Record the findings and the changes made after review.
Participation and peer review
Use a public repository. Post the architecture, important trade-offs, test results, performance evidence and final demo. Ask another developer to complete the required peer review. Tag @reduzer_tech so Reduzer can find the submission.
Document the language, architecture, configuration and main risks before implementation.
Publish commits, test output, throughput results, metrics and dashboard evidence.
Have another developer inspect the failure paths, record their findings and document your fixes.
Next project
More public engineering briefs are coming.