Early in my programming career, I worked for a small tech startup.
We had a team of 3 developers. Because the company was so young, we had the freedom to do a lot of interesting things.
The only problem was that the company was losing money. In fact, the company was losing about $500 in profit every single day.
We were experimenting with different growth strategies, so this wasn’t a huge deal at the time. But we knew that we eventually needed to help move the company into profitability.
9 months later, my dev team built a product that helped us net over $40,000 in profit in a single day.
The experience taught me an amazing lesson. I learned about what’s needed in order to make a massive life change, like becoming a professional developer.
But, how did we get there?
Let me rewind a bit.
Back in 2007, I was riding the Ruby on Rails hype train.
I was on my first programming internship while in college. My friends were using more practical programming languages, like Python or PHP, to build web applications.
But some reason, the Ruby on Rails community fascinated me.
By the time I reached my senior year, I had gained professional experience in C# and C++, and a lot of academic experience in Java. But I was still fascinated by Ruby on Rails. I bought a book, started a couple side projects, and started teaching myself the technology.
I was planning to work as a freelance software developer after college. I was able to line up a bit of work, so during the final months of the semester, I started freelancing to make extra money.
There was one small problem: I wasn’t any good at freelancing.
Freelancing can be difficult. In the world of software, it’s super easy to over-promise. I kept doing this, and it took a toll. I wasn’t billing for hours worked, and I was killing myself to deliver on promises that I had no shot of keeping.
After completely exhausting myself, I realized that I just sucked at freelancing.
It was time to get a real job.
I was fresh out of school. I had a couple of internships and my freelance work as experience. I knew it was going to be hard, but I was hopeful.
I applied to over 100 jobs and only got a handful of interviews (probably 4 or 5).
I landed on of the interviews through a recruiter. I wasn’t very excited about the company. It was pretty boring and required a long commute. Still, the recruiter told me that it was my best opportunity at the time.
Shortly after, a different recruiter said he could set me up with a phone screen at a different company. This company seemed a lot cooler. They used Ruby on Rails, the technology that I had been fascinated by for years. The problem was that the phone screen was at the same time as my in-person interview at the boring company.
I knew that a real interview was more qualified than a phone screen, but I wanted to work for a cool company, not a boring one. So I canceled the in-person interview.
The recruiter ridiculed me and told me I would never find a job with my approach. Oh, tech recruiters… you certainly know how to make new graduates miserable.
I’ve shared the story of interviewing for the position at the cool company before. Long story short, I got the job and was incredibly pumped about it.
This company was really young.
Prior to me starting, the company had one developer. He was fired, and the team needed to be entirely rebuilt. The new team consisted of 3 people: me, my boss Neal, and a much more senior developer than me.
Our business model was all around buying traffic through ad exchanges and monetizing the traffic in smart ways. When I started, we were losing about $500/day in profit.
But at this stage of the company, it was by design. We were venture-backed, so we didn’t need to be immediately profitable. On top of that, the money was going through our platform, so by losing money, we were setting up the infrastructure to optimize and scale out our endeavors.
Neal, my boss, pulled me aside on my first day and took me to a special part of our office building: the NOC Wall.
The NOC Wall was a wall with dozens of mounted computer monitors that showed live updating results for the metrics of our business. There were 4 monitors that had information that our team really cared about with daily, weekly, and monthly breakdowns of things like:
- Traffic numbers
- Monetization numbers
- Profit and Loss
Neal talked me through the metrics and showed me how to interpret them.
“These numbers are important, Ken. Our job is to do whatever we can to improve these numbers each day. That’s the only thing that matters.”
He advised me to start every day by looking at the metrics for 5 or 10 minutes. This would help me get a feel for what was working, what wasn’t working, and what direction we were trying to move in.
I inherited a codebase that I didn’t understand.
The codebase was also in a programming language that I barely knew.
Still, Neal tasked me with completing initiatives that would help these numbers.
“We need an additional landing page, Ken. It needs to be similar to our existing one, but should exist on a different domain and have slightly different images and text.”
We needed the landing page for a new experiment our team wanted to run. It was one of the first tasks I took to modifying the code. It took a little over a week to get this working, but I set up the new pages, pushed it live, and gave the marketing team the ability to run the experiment.
Over the next few days, I returned to the NOC wall to look at the numbers. I could see the new traffic source pushing to my new landing page, and it was making the business money! It was a small amount, but it was a step in the right direction. I was super motivated.
Neal pushed on me to help out with new tests.
“It should be possible to perform A/B tests with our traffic. Talk to Jonathan about how to set that up and integrate with the reporting platform.”
A/B testing, or split testing, is the idea of treating a certain percentage of your traffic differently from the baseline to have statistical evidence about which flow is the optimal one. Jonathan taught me all about split testing and how to integrate it with our reporting system to get the data on the NOC wall.
It took several weeks, but I built a flexible platform that allowed us to perform A/B tests on our platform.
But when I updated the code that was populating the NOC wall, I realized I made a terrible mistake.
I had performed some slightly incorrect calculations and made a change that prevented our reporting system from getting any data (all because of timezone conversion).
This was a huge mistake, and it took me a couple days to fix it.
In the meantime, our team was running blind with no insights about how things were performing. This caused a huge disruption. Pretty much every hour that passed, somebody would ask me about when the problem would be fixed.
After a few days, I was able to fix the problem and integrate with the A/B test framework I built.
Over the next months, I would personally implement a ton of A/B tests.
Some would work and some wouldn’t.
But each morning, I would return to the NOC wall, and I’d see that we were moving in the right overall direction.
I didn’t have much experience in Ruby on Rails, and I didn’t know the “right way” to do things. But I was able to quickly hack things together (like A/B tests), get them live, and learn from the experience.
Still, Neal kept pushing on me to keep improving myself and the business.
“I want you to start expanding our business into a new vertical, Ken. Our business is making money from a narrow band of the market, but there are three new markets we can move into. I want you to launch that.”
And I did. I worked harder than I ever had before to build the infrastructure for us to enter the new markets. It took several weeks. On launch day, I pulled an all-nighter to fix some lingering problems.
But in very little time, we were in a position to start making money in these markets. I would come in each morning and look at the NOC wall. I’d see the numbers reflect the growth that we were achieving because of the new markets. This wouldn’t have been possible without the work I had done.
As time moved forward, the new markets would start making up more and more of the total revenue of the company.
In 9 months, the company, which previously had been losing $500 a day, was humming along.
On a really good day, we would make over $40,000 in profit.
I grew a lot as a developer in this time frame, too. I made a ton of mistakes in the process, but that’s what really helped me grow the most.
I started each day rooted in reality. I’d visit the NOC wall, which would always show me the path that we were currently on.
Some days, the data showed that we were doing well. Other days, we weren’t doing do well. But every day, I would know, no matter what, if we were moving in the right direction.
If you think about it, this is a lot like the path to becoming a professional developer, or the path to making really any big change in your life.
Big change happens slowly. It’s easy to go in the wrong direction. So you need to constantly audit where you are and compare it to where you want to be. If you do so, you’ll know how to make consistent progress to your goal.
When I looked at the NOC wall after I shipped some code and saw the high numbers, I felt I achieved something important. I got the sense that I was moving in the right direction.
If you want to switch careers and become a professional developer, find your own version of a NOC wall.
Find a way to keep track of your progress every single day. If you do it, you’ll find it far easier to stay focused as you work towards your goals.