It’s amazing how quickly 4 years can go by. But I’m back to blogging, and promise to follow this post with more regular entries going forward. In fact, I already have a technical topic scheduled for later this week, and plan to return to Engineering Management topics in the coming weeks as well.
So what have I been doing since my last blog post over 4 years ago? LOTS. Let’s talk about it.
My Time At Stack Overflow
I worked at Stack Overflow from 2014 through late 2023. It has easily been the highlight of my career to-date. I had the fortune and privilege of working with and managing some of the smartest developers in the world. We accomplished so many amazing things together at incredible scale.
A quick timeline of notable events in the past 4 years:
- July 2020: we raised an 85 million dollar Series E to accelerate our SaaS business (my org owned Teams, the SaaS)
- June 2021: Prosus acquired Stack Overflow for 1.8 billion dollars (this did not suck for me)
- Jan 2023: Stack Overflow started pivoting towards AI (eventually named OverflowAI) after fully realizing the level of disruption to our sites and traffic
- May 2023: Upon return from a leave, I became technical lead on OverflowAI efforts, working closely with Prosus and the C-Suite as well as our Eng teams
- Oct 2023: Stack Overflow laid of 28% of staff after rapidly doubling the company size and having our big bets disrupted by AI
- Nov 2023: I departed Stack Overflow (voluntarily with the layoffs)
Why Did I Leave Stack?
In short: it was simply time for me to go. It made sense (and still does in hindsight). I had been there 9+ years, seen and done a ton, reached my potential at the company, and there wasn’t much left for me to do. To be honest, I was becoming bored in some respects. 9 years is a long time.
What I’ve realized over my career so far is that I do best in small-to-medium sized companies (think a few hundred employees max). Conversely, I go insane in larger organizations due to the heightened bureaucracy and politics. Core to my self worth is the need to get sh#t done (GSD) to feel productive and happy.
I have found anecdotally that there is a strong correlation between the size of an organization and its productivity. In general, as an organization grows in size:
- the development velocity and productivity slows way down
- the meetings and discussions factor grows exponentially (each new person adds n+1 peer-to-peer communication channels)
- the more politics and bureaucracy play into accomplishing useful goals (risk tolerance levels, bonus incentives for execs, etc.)
There was a time at Stack Overflow where 2 devs worked for 2 or 3 months to produce a great new product feature that was immediately deployed for the community’s benefit. We launched many of these projects over the years: our “DevKinds” ML project that classified Stack users, our Tag Engine, our Bonfire Chat application, and others. I built Stack Snippets in 2014 in just a few months by myself as a new hire , and it’s still widely used on the site to this day.
Stack was amazing for a long time, but by mid 2022 it had become too large for my tastes and work needs. I was going to well over 35 hours of meetings a week (often triple or even quadruple booked for the same time slots) which left me with maybe 5 hours a week to GSD. It felt to me as if the pace of projects had become glacial; meaningful work was replaced with dozens of meetings with multiple stakeholders (who weren’t always aligned), numerous “hallway conversations” (virtually), repeated status updates, and more Slack pings than anyone could ever possibly read in a work day. That kind of environment isn’t what makes me happy, so naturally I had started thinking about moving on.
To be clear, I don’t think these characteristics are uniquely a Stack Overflow thing or dysfunction. I think that this is the natural outcome of most companies that grow to a larger size, and also why I don’t do well in large companies.
So when the C-Suite came to me (and others) in late September 2023 asking for names for another large round of layoffs, I countered by discussing how many devs who were excited to be there I could save by leaving in their place. After many conversations with Jody, my boss and CTO (who was terrific about everything), we agreed that it made sense for me to depart. I got a solid exit package - a soft landing of sorts - which suited my purposes at that time in my life. We had literally just moved from Florida to Michigan in Oct 2023 and I really wanted some time off to get settled in the new city and state, as well as do some home renovation projects. The timing could not have been more perfect for me, all things considered.
Stack Overflow still employs many incredibly smart and talented people, and I look back on my time there with a sense of happy nostalgia. It was a helluva good run. I’d do it all over again without hesitation.
What Have I Done Since Stack?
After announcing my departure from Stack on LinkedIn, I was almost immediately courted by a Series C tech company. They build a really cool nextgen iteration of an existing data processing tech that efficiently uses all CPU cores and is in general a better product.
I eventually accepted an offer and joined the company in Feb of 2024 - departing shortly thereafter.
I made a few mistakes in accepting that job, the most important of which was letting my ego lead the conversation and decision making process. I liked being pursued by a company - it was flattering and made me feel important. It made me ignore many red flags:
- Over TWENTY pre-offer interviews and meetings.
- Not meeting any of my would-be team members during any of those meetings.
- Obvious morale issues with the folks I did meet during the process.
- Having the role and job title completely changed mid-interview process to an entirely different function.
- Being asked to do a homework assignment that wasn’t well defined and then presenting the wrong results to the group (partly because I didn’t clarify things correctly, and partly because they didn’t specify things well).
To an objective eye, it was clear that this technical organization was mismanaged and extremely disorganized. But again, my ego led the way. So when I finally started there and the full weight of my mistake hit me, I threw all of my energy into quickly making useful and impactful decisions in my role to positively influence the low morale and productivity on my teams. Unfortunately I was stonewalled at every turn by large company dysfunction and bureaucracy, all while being berated by my boss for not getting useful things done. I felt completely set up for failure, so I pushed the eject button quickly (you should never linger in your mistakes in life - it’s not healthy).
I won’t be letting my ego do the driving again anytime soon.
After that short stint, I wanted to take a break from management and refresh my technical skills. After all, it had been over 9 years since I programmed full-time and I believe that the best technical leaders follow the “Engineer/Manager Pendulum” career path . By refining and refreshing my tech skills, I could be a better developer and technical leader going forward.
I had a recruiter pal ping me asking if I knew of any .NET devs who would be interested in a small FinTech startup. A few discussions and one well-organized interview process later, I joined Cartwheel which does Accounts Receivable (AR) automation for various staffing organizations.
I did 6 months or so at Cartwheel and dove head first into learning new things like .NET Core, Docker, Kubernetes, Helm, and other hosting providers like DigitalOcean and CloudFlare. It was a great place to polish my tech skills and a small enough company that I could quickly make a large positive impact. I optimized our CI/CD pipelines to turn 90 minute builds into 5 minutes or less. I also consolidated 16 projects (and accompanying individual Git repos) into a single monorepo project that could be built multiple ways in parallel. This was a huge improvement because the individual repos were all tightly coupled by dependencies on each other, yet independently versioned and released, which put us deeply into “DLL hell” territory and made debugging in non-local environments absolutely terrible.
I’d probably still be working at Cartwheel today, however I left last week because a project I started 4 years ago is rapidly gaining traction, and I need to dedicate time and effort to seizing the opportunity in front of me right now.
Today: Full-Time CodeSession
CodeSession is a project I started in 2020 while working at Stack Overflow. I built it entirely on my own time and personal hardware outside of work. But I built it to solve a problem that we were having with our technical interview process at Stack Overflow.
Anyone who has interviewed at Stack Overflow over the years knows that we like to do “peer programming” interviews. We get you in a (virtual) room with a developer or technical manager, present a technical problem that is relevant to the work we do regularly at Stack, and see how you go about solving it.
We had been using Google Docs with monospace fonts as an “IDE” of sorts for collaborative code editing, but this clearly wasn’t working super well. Google Docs is a word processor: it had no coding features like auto-indentation or closing of parentheses, it tries to capitalize every new line as a new sentence, and so forth. We were effectively jamming a square peg into a round hole in trying to make a word processor into a coding IDE. As a result it was not a great interviewing experience for us or the candidates.
We started to shop around for companies that could offer programming interview tools. We found that ALL of them were A) expensive and 2) just provided a large bank of generic LeetCode-style compsci questions that tested candidates on theoretical “clean room” programming skills and knowledge. When’s the last time that you reversed a linked list at work?
Stack’s hiring process deliberately DOESN’T do LeetCode-style questions because we found that they don’t correlate reliably to a developer’s ability to do the job. Reversing linked lists and traversing graphs are definitely compsci skills, but what good is testing devs on these mostly theoretical algorithms and then having them do totally different work in their day to day on the job (mostly in the form of stamping HTML over database tables with CRUD operations with consideration for large scale traffic)?
Given we didn’t find any good product offerings or options for our use case, I saw an opportunity in the market and went about prototyping a new product.
I started writing CodeSession (which at the time was called CodeInterview). For once in my life I did things “right” in building a tech product MVP:
- I did the simplest, dumbest, ugliest thing I could - as fast as I could - to test the market and prove my product value
- I acknowledged mistakes and fixed them without ego or taking it personally
- I got real people using it ASAP
- I constantly solicited and listened to feedback from the devs at Stack as they piloted it
For the first 12 or 18 months, basically only Stack used CodeSession. I built new features as devs requested them, and iterated on the core concepts of the product to make things better.
But then I began to think: if Stack finds value in this product, I bet other companies do as well! So I opened it up to public use in 2022 with a rebranding to CodeSession (since there was another similar product called CodeInterview already out there, and name collisions are bad for marketing and discoverability).
It’s been about two years since opening CodeSession up to the public, but today it has 227,586 lines of code written in 4,315 code sessions - and it’s growing a ton every single week. I have a handful of paying customers who get value from the product. I’m cash-flow positive and bootstrapped.
Today the IDE experience looks like this:
As the feds cut the prime rate and January inches ever-closer with the promise of a fresh set of annual hiring budgets at tech companies, my window of opportunity becomes strikingly obvious (and limited).
So as of last week I’ve quit my job at Cartwheel to work on CodeSession full-time for at least the next few months. It’s honestly really exciting - and maybe a little bit scary because I am not collecting a consistent paycheck. I don’t think this will ever be the next billion dollar tech company, but if I can create and operate my own product that funds my modest lifestyle and goals, that would be pretty great.
So that’s the bet I’m currently on, and I’ll be blogging about it as I go. I’ll be blogging about more technical .NET topics and Engineering Management concepts as well.
And finally, for those of you who have read this far: a short sales pitch. If you interview developers, why not give CodeSession a try? There’s a Free Forever plan where you can test it out with no credit card or obligation at all.