Development History#
Code Battle grew by shipping an MVP first, fixing the slow and painful parts, and expanding along the way as it was used to support real events. In the early days, progress was often made in small pockets of time between work and study, and keeping a written history helped maintain context and momentum.
May 21, 2017 — Launch the site with a Rock Scissors Paper MVP#
The first MVP of Code Battle was Rock Scissors Paper. It started with a single web page and a single API, and users could inject “their strategy” by implementing callback functions like onGameStart() and onRoundStart() in the code area.
- Tech stack: Built on Node.js + Express with routing and views separated. Monaco Editor was used for the code editor, and Bootstrap provided a minimal responsive layout for both mobile and desktop.
- Game design point: With standard Rock Scissors Paper rules, it’s hard to create strategies that can beat randomness consistently. To introduce room for strategy, the rules were changed so the score depends on what you win with (Scissors: 1, Rock: 2, Paper: 3).
- Concurrent execution issue: If the server can’t distinguish between clients, multiple users running games at the same time can interfere with each other. A simple
trans_idwas introduced to separate transactions and keep sessions isolated. - Production launch: Deployed on an AWS instance (Seoul region) behind Nginx, and the
codebattle.onlinedomain was wired up for the first public launch.
Aug 3, 2017 — Switch from AJAX to Socket.io#
Because the game progresses turn-by-turn and round-by-round, the request volume can be high. Even a small increase in concurrent runs felt like a heavy load on the server. To address this, the game’s in-progress request/response flow was migrated from AJAX to Socket.io.
- Perceived impact: The switch didn’t magically make everything “fast,” but it made the flow clearer and laid a better foundation for real-time features.
- Meaning: This became the groundwork for adding real-time 1:1 battles between users later.
Aug 14, 2017 — Release 1:1 online battles with remote users#
Originally, battles were only possible against opponent logic implemented on the server (RANDOM / LEVEL, etc.). This release added true remote 1:1 online matches between users, including a lobby (nickname), match requests, and basic matchmaking flows.
- Implementation difficulty: Working with sockets for the first time came with a lot of trial and error, and some parts needed cleanup after functionality was working.
- Reality check: “Online battles are available” doesn’t automatically mean there are opponents online. Still, building the feature was valuable for later event operations (tournaments, brackets, etc.).
Sep 6, 2017 — Search engine optimization (SEO)#
Basic SEO work was done for Google and Naver: site verification, sitemap submission, and metadata improvements. After that, it was largely a waiting game—hoping search engines would reflect the changes well.
Nov 1, 2017 — Add Five in a Row (Omok)#
The second game was Omok, and this is when “how to support multiple games cleanly” started to matter.
- Structural changes: The system was refactored so each game could have its own Socket port, controller, and game files.
- Operational friction: Adding a game often required opening ports in AWS security groups, which made “easy game expansion” still somewhat cumbersome.
- Opponent algorithms: Started from RANDOM / LEVEL1 and gradually improved through LEVEL2 and LEVEL3 (e.g., minimax). LEVEL3 in particular required significant debugging to ensure it didn’t lose to lower levels.
Aug 10, 2018 — Add Bulls and Cows (Number Baseball)#
After a long pause, Bulls and Cows was added. The core of the game is narrowing down the answer candidates using feedback such as “balls” and “strikes.” The tricky part is that once the candidate set is narrowed, choosing the “next best guess” often becomes ambiguous—and can drift toward randomness—making it hard to create clear skill gaps between LEVELs.
- Rule tweak for differentiation: A tie-break rule was added: if both sides guess correctly in the same turn, the player with the larger number wins. This helped make LEVEL1 / 2 / 3 meaningfully different.
Aug 20, 2019 — Add Sutda#
Sutda took longer than expected because defining a clean and simple game protocol was difficult.
- Why it was complex: Compared to earlier games, the meaning of “turn” was more complicated, and the starting player could change by round, increasing implementation complexity.
- Scope control: To keep the game manageable, the rules focused on core outcomes like “kkeun,” “ddaeng,” and “gwang-ddaeng (38, 18, 13).”
Sep 24, 2021 — Add an SK Planet event game (1:1 martial-arts tournament concept)#
At NEOWIZ, Code Battle used to be the final session of an internal developer event—and the moment when the room hit peak energy. That memory wasn’t unique to the author. A contact planning an internal developer event at SK Planet discovered the author’s posts via search and reached out, which led to supporting SK Planet’s Code Battle session using this site.
- What “support” included: Beyond building a web page, it included proposing what kind of game would fit the event, how qualifiers and finals could run, and what operational tasks would be needed to run the session smoothly.
- What it proved: Code Battle has value as a service, but its strength as a “tool to energize developer events” became especially clear during this period.
Nov 24, 2022 — Add an SK Planet event game (real baseball)#
There was a fun moment where a contact initially assumed it would be “number baseball” and looked slightly disappointed—until it hookup was clarified that it was “real baseball,” which quickly improved the reaction. From this point on, event-fit rules that are both intuitive and fun to watch became a bigger focus.
Dec 2, 2023 — Add an SK Planet event game (Number Card Battle)#
While considering options like Hold’em, Omok, and Sutda, “gambling themes” felt risky for an internal event. So a new game, Number Card Battle, was designed—borrowing structure from Sutda while changing the theme.
- Feedback: Some participants said the concept was harder than previous years, but the event still wrapped up successfully, which was a relief.
Jan 30, 2026 — Release a traffic-focused improvement and design renewal#
Nearly nine years after the initial launch, Code Battle still had almost no marketing and largely retained its original look. The main reason for holding back was structural: the games exchanged a lot of data with the server during execution, and the system felt fragile under higher concurrent traffic.
- Turning point: While adding SK Planet event games, an approach was developed to run games without server communication during gameplay, which made it possible to define a clear improvement direction.
- Shipping the work: Even after the idea was clear, it was postponed for years—until the Ted Factory planning created a sense of responsibility to finally do it. That led to shipping traffic-related improvements and a design renewal.