From Dropout to Web Dev

I started this decade as a 17-year-old college freshman in Russia with no job and no industry connections. A decade later, I'm writing about it on my own blog. That alone would've made my younger self proud. My path wasn't straight, and it certainly isn't a template for anyone else—I had the privilege of a supportive family and a background that made people assume competence. But if parts of this story resonate, that's enough.

My first year at university was a mismatch from day one. The school handed out Macbooks (the white plastic ones with GarageBand—the best), but the curriculum barely touched programming for the first two years, leaning heavy on linear algebra and physics. I started skipping early lectures, my knowledge gaps compounded, and most of my memory from that period is just anxiety about falling further behind. Even English class, which I was allowed to skip, turned into a shakedown: the teacher refused to accept my final test unless I paid for hours of "catch up training." The experience left me with a deep distrust of higher education.

My personal life wasn't any better. I was stuck in a relationship that wasn't working but was too inexperienced to leave. Professionally, though, 2010 was a turning point.

I found a local meetup on software development—I didn't even know meetups existed. The speaker was an executive at a Russian-American outsourcing firm, and I approached him cold to ask if they were hiring. I'd been programming since age 12, so I passed their test exercises and started work that summer at a salary of $18k/year. That's eighteen thousand, not one-eighty. But it was Russia, rent was cheap, and I immediately moved out of my mom's apartment into a $150/month room. My first purchase was an iPhone, which blew my mind with its UI quality.

That was it for university. With real work paying real money, I lost all desire to sit in lectures. I stopped showing up, returned my Macbook, and didn't go back for five years—just to collect paperwork. To be clear: I'm not recommending dropping out. I knew I could fall back on family. And I had the good fortune of being viewed as knowledgeable by default as "a guy who started coding early." People who don't fit that stereotype often need a degree just to get that assumed competence.

The New York Detour

2011 found me mostly cleaning up after cheaper outsourcing firms. Lacking industry experience myself, I overengineered projects to try every shiny technology I found—I even put random Microsoft Research projects into production. Sorry about that. But one project sent me to New York for a month. An investment group's order approval system was flaky beyond comprehension, written by a contractor whose name I still remember. His masterpiece: a single 30,000-line function. I printed it out, spread the pages across my desk, and annotated them in pencil. Same block of code. Fifty times. With different conditions. Someone got paid per line, apparently.

Working there was a cultural shock. The client was so non-technical that pushing a bugfix required a Word document and a sign-off from their IT department head. Now that's code review. The project technically succeeded, but the job felt increasingly like a chore.

Toward the end of my trip, I stayed out late at a bar concert and overslept the next morning's 9am client presentation by four hours. My manager made excuses for me; the client just saw me as some scruffy Russian kid. There were no repercussions, but I was mortified.

Back in Saint Petersburg with its endless white summer nights, the burnout set in for real. One restless evening bled into a bar-hopping 7am epiphany. I ate a shawarma, went to the office, and quit.

A friend invited me to camp in Crimea (before it was annexed). For two weeks, we were mostly naked, somewhat altered, with an old Nokia that held a week of battery. Most of it I barely remember—two moments stand out. Someone threatened me with a knife but vanished by morning. And I tried to swim around a cliff and nearly drowned, saved only by a rock I crawled onto and passed out on.

That trip was a hardware reset. The burnout was gone, my motivation was back. There was just one problem: my skills were irrelevant. I'd been doing desktop software—which nobody wanted anymore. Mobile, front-end, or backend were the options, and I knew none of them. Back to living with Mom.

An Unconventional Bootcamp

Around that time, a Russian expat returned from Silicon Valley and posted on a social network looking for volunteers. His pitch: work on his projects for free, and he'd teach us web development for free. It sounded like a great deal, so I signed up. The "teaching" turned out to be a few web tutorials; we mostly learned by helping each other. But we got root access to real projects, pushed changes to production, and broke things live. It gave our learning structure where formal education had failed. I picked up Git, Python, Django, some CSS and JavaScript, and enough Bash to deploy my changes.

I'm still not sure how to judge that program nine years later. We did work for free, true. But the projects were in edtech, we could drop out anytime, and I genuinely consider that person a mentor. I'm not going to tell you free work is good practice; I'm just telling you what happened.

Eventually, I built a dashboard to track the program's learning outcomes, and my mentor suggested pitching it to companies that run courses. My foray into playing "startups" was painfully awkward. I didn't know what product I was building and pitched different versions to different clients, ultimately creating several completely different websites on a single engine for about $200 total. I wasted months and the time of friends who volunteered to help. I shut it down in shame. The silver lining: I had become a web developer.

Still, I had no job. That was about to change.

2012: The Rejection That Redirected Me

By 2012, I was twenty years old and convinced there was exactly one company worth working for: a Russian social media giant. Everyone in the country used their product; the team was small, elite, and seemingly well-treated. Their executives talked openly about how well engineers were paid, and the senior developers were minor celebrities in Russian tech circles.

Through my mentor, I got an introduction to their CTO. My take-home exercise was to build a clone of their friend-selection typeahead. I spent two weeks on it, obsessing over pixel-perfect cross-browser rendering, replication of caching behavior, and debouncing. I was proud of the result.

The onsite interview, as I suspected, revealed a gap in large-scale experience. But they didn't reject me outright: they offered another exercise. They wanted to see a logged-out landing page for their service, with a depiction of a feature phone — an attempt to reach users on cheap handsets. I spent a week engineering that page, including hidden easter eggs, but couldn't find a good-looking feature phone design. I chose an iPhone instead. Aesthetically beautiful, of course. But the only hard requirement was ignored, and I was rejected.

I cried for hours. I had no other options: living at home, earning no money, and questioning whether dropping out was a mistake. I signed up for iTunes U's iOS development course, two Coursera courses (Compilers and Machine Learning). To keep myself accountable, I organized a study group that would watch online lectures together. I didn't end up finishing the coursework, but I learned enough to prove that these topics weren't magical. They were techniques, and that was enough to soothe my fear.

In the middle of this, I got an email from someone looking for a developer. Despite mono, this founder was persistent. Roman Mazurenko was unlike any startup founder person I'd met before. He was interested in DIY publishing and had spent years injecting style into Moscow's scene. He described his vision — a DIY publishing platform — based on a concept video that was, in effect, high-quality smoke and mirrors. He said yes a lot, and it was working. He wanted me to move to Moscow, build an iOS app, and learn along the way. I said yes.

2013: Learning by Building

My salary rose to $30k — double my previous rate, and respectable for Russia. I negotiated stock as part of my package at Stampsy. That stock ended up worthless, but it didn't matter at the time. Our team was six people, and none of us had real iOS experience. The relief I felt the first time a teammate figured out an animation we needed was unforgettable.

For months, I lived at the office. It was not a healthy work-life balance, and I don't look back proudly on that part of it, but I learned more during those months than in the previous two years combined. Eventually, I moved out and into a flat with Roman. Rent was $1k per month, in a neighborhood five minutes from the office.

We started putting small, potentially reusable pieces of code on GitHub. Expecting nothing, we were thrilled by even a few contributions. The most popular project I worked on received about 30 stars, and that felt like a milestone.

Around that time, our designer introduced me to Bret Victor's talks — specifically, "Inventing on Principle." It deeply influenced how I thought about the connection between code and direct feedback loops.

We released our iPad app in April, and when Apple reached out to feature it, we were over the moon. The app created beautiful magazine layouts, but product-market fit remained elusive. Nobody had compelling content on an iPad, and the iPad's camera was poor. The product logic didn't hold up, and the real-world response mirrored that. Personal relationships were similarly strained; I eventually broke up, withdrew from a mutual circle for months, then reconnected with one friend in particular. Cold and feverish, I showed up at her place in St. Petersburg. She gave me tea, warm socks, and a reason to stay. I moved in.

2014: React and a Swiss Army Knife of Side Projects

After a short existential crisis about the iPad app's failure, we pivoted to a webapp. This meant learning JavaScript, properly this time. We used Backbone for a prototype, and struggled with its verbosity for interactive parts. My colleague initially dismissed React, then eventually admitted it wasn't bad. When I tried it, the first component I converted was a Like button. It felt right — fundamentally different. And with unidirectional data flow, we developed faster and debugged less. We gradually converted all UI to React.

The private beta attracted photographers making visual stories — something between Medium, Pinterest, and Tumblr. It wasn't a runaway success but not another dead end.

The biggest challenge was the lack of an ecosystem. The only router we found was impossible to configure, so we wrote our own. Once React Router launched, we added features we needed. There was no drag-and-drop for our use cases, so I ported a colleague's library into a React wrapper. I created helpers to manage document titles and another library to normalize API responses — with a core idea suggested by Jing Chen on the React IRC channel. That library later formed part of Twitter's foundation.

I wanted to contribute to React itself. Paul O'Shannessy directed me to an open pull request, but the contribution didn't merge for months, due to large release cycles. I found that frustrating and shifted energy toward the ecosystem instead — a decision that proved more impactful.

I also started speaking publicly. One lecture in our office ran two hours, and attendees were polite enough to stay. My BerlinJS talk on React and Flux went badly — I hadn't practiced and only covered half before the time ran out. From there, I rehearsed talks three to fifteen times before each one.

A Facebook recruiter contacted me in 2014; I missed the note, and by the time we connected, it was clear they couldn't hire me easily in the US. I didn't have enough years of experience and had dropped out of college.

One project, though, defined my year and resonates still. While converting from require.js to webpack, I stumbled upon a curious feature called hot module replacement (HMR), intended for CSS live-reload. In webpack, it could work for JavaScript too. I asked about it on StackOverflow; webpack's creator responded, and the idea snapped into place: tie HMR to React, bringing Bret Victor's principle of instant feedback into the browser.

Running on a hacked-up React source and globals, I worked until 7am for a demo I could tweet. Nobody cared about my Twitter before, but this post received retweets, and those 20 retweets validated the concept. I knew I wasn't alone in finding it exciting. Spare time was scarce, so I took a vacation and finished the prototype then.

I should emphasize: I don't think everyone — or anyone — needs to work through vacations or nights necessarily. I could have made better scheduling decisions to fit uninterrupted moments into regular days. But to misrepresent time spent would be less honest. HMR changed what I believed possible in development.

A Spontaneous Crossroads

By 2015 the product had emerged from private beta but growth was linear at best, and the company was struggling to raise more funding. My own attention was drifting toward open source work. I had also decided I wanted to give my first conference talk. Hot reloading seemed like the obvious topic, but it had already been mentioned at ReactConf. To make the proposal more compelling I added “with time travel” — a nod to Bret’s demo. The talk was accepted, and for a few months I gave it little thought.

That April, my paycheck arrived several weeks late. It eventually cleared, but the signal was clear enough: I needed a new job. A company that relied on one of my projects agreed to sponsor my continued work on it for a few months. Around the same time, my girlfriend asked why we weren’t getting married sooner. I had no real answer, so we bought rings and had a wedding that cost all of $100.

The talk deadline was approaching and I still had no idea how to implement time travel. I knew Elm had something similar, but I was afraid to look at it — I worried I’d discover it just wasn’t feasible in JavaScript. I had been experimenting with several Flux libraries, including Flummox by Andrew Clark, and I had begun to suspect that getting hot reloading to work properly with Flux would lead to time travel as a natural consequence. Sunil’s gist clarified the idea: instead of a store, use a reducer function. I had a name in mind for the pattern already, and I needed it for the talk.

Redux came together just in time for my demo. My first rehearsal was over Skype; I sweated, mumbled, and finished early. When I asked the organizer for feedback, he said “well… people like you,” which I took as a polite way of saying the talk was terrible. A designer friend from the startup I’d left helped me overhaul the slides, and the polish did wonders for my confidence. I practiced a dozen times.

Flying to Paris for my first real conference was probably the happiest day of my life. For the first time, avatars became faces. I was surrounded by my personal heroes; it felt like going to Hogwarts. The talk itself almost didn’t happen. My laptop refused to connect to the projector. Christopher Chedeau lent me his machine, and I transferred my live demo setup to it — minus the Sublime license, which is now a running joke for anyone who’s watched the recording. The demo initially failed because of a Node version mismatch, and the conference WiFi was too weak to download anything. An npm command that rebuilt the binaries saved the day, and the talk went well.

Afterward I met Jing Chen, whom I remembered from IRC. When the subject of Facebook came up, I mentioned I couldn’t get a US visa. She asked if I’d consider the London office — I didn’t even know one existed. My wife said yes immediately, so I said yes to an interview. Four Facebook people happened to be at the conference, and Jing arranged for me to complete the full interview process at the hotel, in intense summer heat. There was no time to prepare or get nervous. At one point I froze trying to write three lines of code to swap two array items and asked Jing to look away. She said, “I know you can swap two items,” and that was enough to finish the task. I likely didn’t pass with flying colors, but I got the offer.

Scaling Up, Moving On

My talk became widely shared. Andrew Clark deprecated Flummox — then the most popular Flux library — in favor of Redux, which he co-wrote with me. People started using Redux in production, and the README, written for early adopters, confused newcomers. I had no job and a several-month wait ahead for a UK visa, so I started a Patreon to fund my projects and, specifically, to write Redux documentation and record a video course. The Patreon brought in roughly $5k/month — more than any salary I’d had. “Getting Started with Redux” was free but popular, earning me around $3k/month in royalties for a good while.

Facebook handled the bulk of the immigration paperwork. I took an English exam, went through health checks, and the company moved us — including our cat, from Russia to the UK, at a cost of about $5k. My offer was at engineering level 4, with a base salary of $100k/year and an initial restricted stock grant of $125k vesting over four years, plus an $18k signing bonus that eased the transition. Tech salaries in the UK are lower than in the US.

We landed in London at the end of November 2015, never having visited before. Our black cab from the airport was initially a fogged-up mess; we couldn't figure out the heating controls for ten minutes. Once the windows cleared, we saw the city for the first time: it was beautiful.

The next day, my friend Roman Mazurenko was struck and killed by a careless driver in Moscow. He had just gotten his US visa approved and had returned home to collect his documents. He’d once told me there was something devilish about Moscow — that it didn’t just let you go. I never saw him again. His friends built him a digital afterlife, and I know he would have appreciated the irony of its two-and-a-half-star App Store rating.

Learning a New Normal

2016 was a blur of new job, new city, new country. I spent the first months in a state of constant stress, trying to understand accents without subtitles at work. I couldn't follow what my manager was saying. I faced unfamiliar bureaucracy — applying for a national insurance number by phone, with a Scottish accent I couldn’t parse. Why is my tax code zero? People actually pay taxes here? I had to learn what the NHS even was. On my first US trip for onboarding, I forgot to eat, drank too much coffee, and had a full panic attack while explaining hot reloading to a colleague. An ambulance was called; the $800 bill was fortunately covered by Facebook.

I had originally been assigned to the React Native team in London. But I wasn’t particularly excited about that, and Tom Occhino, who managed the React team, suggested I join the US-based React Core team as its only UK member. I was used to remote work from open source, so I agreed. Later that year, as React’s popularity exploded and everyone was assembling their own complex boilerplates with bundlers, watchers, and compilers, Christopher Chedeau suggested I prototype a simple CLI for starting new projects. We built the first version in a few weeks and released Create React App.

Settling In

The Egghead courses kept paying royalties steadily, and I spent them without much thought — mostly on delivery food and clothes. In 2017, I realized the royalties were taxable as foreign income and that I owed Her Majesty roughly $30k. My savings were wiped out again. I hired an accountant.

At work, 2017 was mostly consumed by rewriting React from scratch — you know the result as React 16. Personally, things settled down. Bureaucracy became manageable, phone calls stopped being terrifying, and I could watch movies without subtitles. I stopped doing side projects.

And Now

The last two years are still too close for clear perspective. Work on the React project has been as demanding as ever, with the ongoing efforts you’ve seen in public announcements and conference recaps. I’ve grown as an engineer and still have much to learn. Our London team has grown — I’m not alone anymore.

People occasionally recognize me, which is humbling. Once, someone recognized me in a sauna and immediately started complaining about React. Please don’t be that person.

I got promoted. I started this blog. I have another side project in the works that I’ve been mulling over for two years. I keep meeting people from the internet and putting new faces to avatars — it continues to be fun.

What I’ve realized over this decade is that my drive to explain things has become just as central to me as my drive to build. Perhaps more so. I look forward to doing more of that in this new decade — the twenties.