← All work

Devlympics

Secure Code Warrior's core platform is compliance training — structured, enterprise, mandatory. Devlympics had to feel like the opposite. Same company, same users, and the design language that worked for one was actively wrong for the other.

Secure Code Warrior Lead Product Designer 2022 — 2023 50K developers
Devlympics 2023 — the landing page as shipped. Every tournament card carries its state and its progress.
Devlympics 2023 — the landing page as shipped. Every tournament card carries its state and its progress.

Making security feel like a sport

Devlympics is Secure Code Warrior’s annual global coding competition — 50,000+ developers, North America and APAC. I owned the full UX lifecycle: landing page, registration, competition interface, results.

The core SCW platform is compliance-driven training: structured, enterprise, mandatory. Devlympics had to be high-energy, voluntary, competitive. The same design language could not serve both — and the existing experience had grown organically into a compromise that served neither.

The result was inconsistent UI patterns, unclear competition state (Am I registered? When does this start? Where do I rank?), and a registration flow that lost people before they reached a single challenge.

The audience was deeply technical, with zero tolerance for friction. If the UX failed them they wouldn’t file a complaint. They’d stop participating — and tell their colleagues.

What research told me about developers

Discovery sessions with stakeholders across North America and APAC, then interviews with six past participants at varying skill levels.

The fourth finding is the one that shaped the most design. Competition mechanics reliably motivate the top 10% and quietly demoralize everyone else — a leaderboard is a scoreboard for people who are already winning. Most of the work was making progress legible to someone who was never going to place.

Structure before polish

Landing page wireframe — the structure was agreed before any visual design existed.
Landing page wireframe — the structure was agreed before any visual design existed.

I settled the architecture first: hero and registration CTA, an overview that answers what is this and why should I care, the tournament grid, and a progress scorecard. Only then did the visual design happen.

Fixing the registration confusion

Registration flow — every branch made explicit, including the failure paths and the 10-day follow-up.
Registration flow — every branch made explicit, including the failure paths and the 10-day follow-up.

I mapped registration as a decision flow rather than a screen sequence, which is what surfaced the actual problem: there was no confirmation state. Users completed the form and got nothing back that told them it had worked.

The redesign added explicit confirmation, a follow-up email ten days out, and a clear path from confirmation into profile completion and practice missions — so the gap between “I registered” and “the event starts” had something in it.

The lobby — the thing that didn’t exist

Tournament onboarding — the
Tournament onboarding — the "ready to join" state sits between registration and competition start.

The most valuable addition to the whole project is one box on this diagram: “Ready to join state.”

Before this, there was nothing between registering and the tournament going live. Participants sat on a page that told them nothing and refreshed it. Adding a genuine lobby — a state that acknowledges you’re in, tells you what happens next, and lets you pick a language and difficulty before the clock starts — eliminated the anxious refresh loop entirely.

It cost almost nothing to build. It was the single biggest improvement to the pre-event experience.

Making state and progress impossible to miss

Tournament cards — state badge, points, language count, and a progress bar on every card.
Tournament cards — state badge, points, language count, and a progress bar on every card.

Every tournament card answers, without being asked: am I in this one? (READY TO JOIN / JOINED / IN PROGRESS / COMPLETED), how hard is it? (points, language count), and how far have I got? (a progress bar, always visible).

That progress bar is the answer to the skill-level anxiety finding. A developer who will never touch the leaderboard can still see themselves moving. Progress and rank are different motivations, and the original design only served one of them.

Difficulty and points on the face of each card also let participants self-select an entry point rather than bouncing off whichever challenge happened to be first.

Components, not screens

Reusable card components — contributed back to the platform design system.
Reusable card components — contributed back to the platform design system.

The patterns built here didn’t stay in Devlympics. The card components, state badges, and progress indicators went back into the SCW design system for platform-wide reuse — which, given where my career went next, turned out to be the most durable thing I did on this project.

Impact

What I’d do differently

The fixed event date compressed the iteration cycle, and I let it. I’d run moderated usability tests with actual developers on the challenge navigation before launch. This audience is technical enough that small friction compounds fast under competitive pressure — and I shipped navigation I hadn’t tested with them.

I’d also have pushed earlier for quantitative funnel data on registration drop-off. The qualitative signal was clear; the numbers would have made the prioritization argument much harder to wave away.