A programming puzzle inspired by a programming career.

Professional programming involves balance between the opposing philosophies of architecture (GRASP, SOLID) and pragmatism (KISS, YAGNI). Over-architected code front-loads difficulty to solve problems that won't necessarily ever come. Under-architected code causes exponentially more pain with each new requirement, like a house on a bad foundation. Finding the middle ground consistently, our job, is hard.

In the real world choices we make in our codebase will always come back to us. Yet the feedback loop on decisions may be months or years. Welcome to the garden of practice. When you make choices in this low-stakes sandbox it'll only take minutes to reap what you have sewn.

Consider this an alternative to traditional coding challenges (e.g. codility, google code jam) that challenges the traditional valuation of engineers on academic math-intensive skills. Expert engineering is not about plugging a sequence of numbers into the OEIS; it's creative composition.

-- Alex.
How does scoring work?

Your score is measured on productivity and efficiency. Your productivity will be measured in time; you choose how much time to spend planning, architecting, and coding. Just like the real world, time will be your biggest foe.

However, you will also be scored on efficiency, measured by how much typing you have to do. In the real world, changing things creates a cost on your team (PRs, test-cycles, time for your teammates to relearn your code). As an exercise in writing simple yet reusable code, keystrokes will be counted.

Lastly, if you submit broken code a lot, you'll be penalized, like the real world. If your refactors break things, that incurs a cost on other teammates. And just like the real world you can write tests, but like everything they cost time. You'll get to decide where to draw the line.

You won't be penalized for the following:

Good Luck! (p.s. My difficulty ratings are strict... like FTL strict)