For the past few weeks I've been working on a stock market draft game with my teammates. You draft stocks by sector, hold them for years, and see how your picks would have played out. The core game was working, so the conversations shifted from "does it work" to "are these the right rules."
That's where things got complicated.
Too many good ideas
Everyone had opinions on how the game should play. How many rounds? How many stocks should you see each round? Should you hold a stock for 3 years or 10? Should the board mix industries, or should some rounds be all tech? Should you split your money evenly or choose how much goes into each pick? Should you be able to sell halfway through and reinvest?
Every idea sounded reasonable when someone described it. None of them could be settled by talking. You have to actually play a round to know if it feels good.
So the ask was simple: make different versions of the game so we can try them.
The obvious way (that we skipped)
The obvious approach is to copy the real game a handful of times and change the rules in each copy. Real historical data, real scoring, the full thing.
We thought about what that would look like a month later. Several codebases to keep in sync. A bug fixed in one version still broken in the others. And once we picked a favorite, most of that work would get thrown away.
That's a lot of effort to answer a question that's really about feel.
What we built instead
We built one small website that works like an app store. The home page has a grid of cards, and each card is a different version of the stock game. Tap one, read the rules, and hit play.
It's frontend only: no server, no API calls, no database. The companies and prices are fake. There's no score at the end either. The point isn't to see who won, it's to notice which version you want to play again.
There are six preset modes:
Classic Draft is closest to the original. 8 rounds, one stock per industry, money split evenly, and every pick held for 10 years.
One Shot shows you a single stock each round. Take it or skip it, and decide whether it's worth 10% of your budget or 50%.
Budget Boss is all about allocation. You have to spend a minimum on each pick, but everything above that is up to you.
Active Trader throws 10 stocks at you every round, uses short 3 year holds, and lets you sell whenever you want.
Sector Swap lets you sell a stock, but you have to replace it with one from the same industry that round.
Sector Focus shows five stocks per round, all from one randomly chosen industry. You're not picking a sector, you're picking the best of one.
And then there's a seventh card which is a Custom Mode builder.
The card we almost didn't build
Our first plan only had five fixed modes. When my teammate reviewed it, he pointed out two problems.
First, the five modes didn't cover every option we'd been discussing. Nothing showed 10 stocks in a round, and there was no way to make a board where every stock came from the same industry.
Second, and more important, picking five combinations meant we were locking in our guesses about what would be fun before anyone had played anything. That's the exact thing this project was supposed to avoid. If someone wanted to try a new combination next week, it would mean another round of development.
So we went with both. The presets stay as quick starting points, and a Custom Mode card lets you set every rule yourself.
How Custom Mode works
Custom Mode is a single page with a section for each setting: rounds, stocks shown, hold time, how the board is filled, industry limits on your picks, how money works, and whether you can sell. Everything is a big tappable button instead of a dropdown, since a lot of us test on our phones.
There's a row at the top to start from any preset and tweak from there. Below the form, a plain-English summary of your rules updates as you change things, like "5 stocks shown each round, all from one industry."
The part I like most is how it handles combinations that don't work. If you ask for a board with one stock per industry but 10 stocks per round, it tells you there are only 8 industries and keeps the Start button disabled. Setups that work but might be surprising get a softer warning, like a 10 year hold in a 5 round game where nothing ever sells.
When you hit Start, every setting goes into the URL. So when someone finds a combination they like, they just send the link and everyone else plays the exact same rules.
One engine for everything
What made Custom Mode cheap to add was that the game never knew about specific modes in the first place. Every mode, preset or custom, is just a set of settings, and one engine reads those settings and plays by them. The preset cards and the custom form both end up handing the same kind of settings to the same game.
When we changed direction, the engine needed one new board type and a function to check configs. Everything else stayed.
Making up a stock market
For the original game we pulled real historical prices, and between API rate limits and missing data it took more work than we expected. For a prototype that felt like overkill.
So we generated our own market: 80 made-up companies, 10 per industry, with 25 years of prices. Each company has a personality. Some grow steadily, some swing wildly, some slowly decline. Industries have good and bad years, and there's a crash followed by a recovery. We bumped it to 10 per industry specifically so an all-one-industry board could still show 10 stocks.
Fake companies turned out to be better for this anyway. With real ones you end up playing from memory. With made-up ones, you're reacting to the rules.
Three people working at the same time
On the original game we mostly worked one after another, and at one point we spent an afternoon untangling merge conflicts from branches that all started at the same commit. We didn't want to repeat that.
This time the first pull request was just the foundation: project setup, a shared file describing what a stock, a mode, and a game look like, and placeholder versions of every engine function with their final names. Once that merged, everyone knew what they were building against.
Then we split the work by folder. One teammate built the engine: the config checks, drawing the board, buying, holding, auto selling, and reselling. Another teammate built the screens, like the stock cards, the four spending controls, the holdings panel, and the game over screen, all against sample data on a preview page so she never waited on the engine. I handled the fake market, the store pages, Custom Mode, and the final pull request that connected everything.
Since nobody was editing the same files, merge conflicts were almost nonexistent.
How we actually built it
Before anyone wrote code, we wrote a detailed description for every pull request: which files to touch, the rules, the edge cases, and what the tests should check.
Each of us took those into Cline in VS Code. I'd start in Plan mode and have it walk through what it was going to do before touching anything. That step caught more misunderstandings than code review did, because fixing a sentence in a plan is a lot easier than fixing a few hundred lines of code. Once the plan matched what I had in mind, I'd switch to Act mode, let it build, then run lint, typecheck, tests, and build before opening the PR.
This helped a lot when we changed direction halfway through planning. We updated the PR descriptions and kept going. And because each PR said which files it owned, the changes stayed in their own lane, which matters when three people are working in the same repo.
What I'd take from this
If you're stuck choosing between versions of something, build the cheapest thing that lets you actually try them. Skip the backend, use fake data, and leave out anything that doesn't help answer the question.
Keep your rules as data instead of hardcoding them. That one decision is why adding Custom Mode was a small change instead of a rewrite.
And give people presets and a way to go off script. The presets get you playing in seconds, and the custom option makes sure you aren't limited by what the team guessed would be fun.
What's next
Now we play. Everyone runs through the presets, tries some custom setups, and shares links to the combinations they like. Whatever rules win get brought into the real game with real data and real scoring.

Top comments (0)