← All posts

From Task Tickets to Platform Ownership: Four Years Inside One Marketplace Backend

Almost four years inside one automotive marketplace backend — founding engineer who owned the release path. This is the project story, told through actual PR titles: from "Curbo backend#30" to cutting multi-country releases.

The archaeology of getting better

My first pull requests from 2020 include one titled, in its entirety, "Curbo backend#30". Not a description — a repo name and a number. In June 2021 I merged ~18 PRs in a single day with titles like "Update service and tests for social-network entity #902" — the pick-and-shovel era, one CRUD entity at a time, more than 25 entities. By late 2021 my PR titles had whale emojis: "Handled sell your car into inspection #2228 🐋". That was the year of the CRUD grind.

I keep these titles on purpose. A commit history is the most honest résumé there is — it shows you exactly what junior work looks like, and exactly when it stops. Mine stops being junior somewhere in 2022, and the titles show that too.

The Re-structure campaign: 11 modules without stopping the roadmap

From August 2022 to February 2023 I ran a re-architecture campaign across the live platform: every change carried "re-structure" in the title, spanning eleven modules — settings, user, inspection, buy, catalog, customer-care, pricing, quotes, support, test-drive, advertisement. It starts with "refactor(support): Re-Structure car in support #3965" and some days covered four entities at once. The roadmap never paused; features shipped in parallel the whole time.

  • The campaign is also where my titles switch to a conventional format — the discipline arrived with the architecture work, not before it.
  • Multi-country support had been built module by module a year earlier ("Add multicountry support to the city, state and country modules #1636", Sep 2021). That groundwork is why expanding to two new countries in 2023 was a single configuration PR: "feat(global): Add BRA and ARG config #4794".
  • After every release, the migration code got deleted — "feat(global): Eliminate scrips migrations after release sprint 60 - 59 #4527", merged on Christmas Eve 2022, typo and all. Migration code that lingers becomes load-bearing; we never let it.

The architect year

By 2023 I was merging a fraction of what I had in 2021 — and it was my most senior year by far. "Proposal v3" rolled out across eight modules in twelve days (March 7–19, 2023). "feat: introduces packages" turned the backend into a package-based monorepo in April. And I was the person who pressed the button: 71 of the repo's 91 release PRs are mine — I cut staging and production for a multi-country marketplace for years. Seniority, measured honestly, is your PR count going down while your blast radius goes up.

The whole arc
owned, 4 yearsRelease path
DO · CO · MX · BR · ARCountries live
11Modules re-architected

Closing the chapter

My last merged PR in curbo/curbo-backend is "fix: eliminate keys validation", July 20, 2023. Curbo wound down that November. What remains is the work itself: a multi-country marketplace platform I helped grow from entity CRUDs to packages, federation, and release ownership — documented commit by commit.

A commit history is the most honest résumé there is — it shows junior work and exactly when it stops.

What I would tell anyone doing this

  1. Delete migration code after every release. It is the difference between a codebase that can evolve and one that can only be feared.
  2. Do the boring groundwork module by module; it converts strategic moves into config PRs. Two countries in one PR only happens because twenty modules learned about countries two years earlier.
  3. Let your PR volume fall. If your numbers look the same in year four as in year one, you scaled your effort instead of your judgment.
  4. Keep your embarrassing PR titles. "Curbo backend#30" next to "feat: introduces packages" is the clearest growth chart you will ever own.
  5. Measure seniority by blast radius, not by busyness. Owning the release path is a different job from shipping CRUD.
Share this article
X / TwitterLinkedIn

Related writing

July 9, 202612 min readInsurance PDFs Are Hostile: An AI Extraction Pipeline in Three ActsAn eval-backed pipeline turned hostile insurance PDFs into structured data across an 82-state Step Functions workflow. It grew from model bake-off to API to serverless orchestration, grounded in a 179-PDF corpus.Read →July 7, 202610 min readFour AWS Certs, and Not One of Them Taught Me to Cut the BillFour AWS certifications opened doors; a production infrastructure audit taught me how to find what deserved to run. The lessons that moved money live in the audit trail, not the exams.Read →July 3, 202614 min readHow I Cut a Production AWS Bill by ~86% — From $25k to $3.5k a MonthAn ~86% reduction took production AWS from ~$25k to under $3.5k a month while the platform got faster. The gains came from database, compute, networking, dead-weight removal, and disciplined measurement.Read →