March 15, 2019
I wrote this post for my newsletter, sign up here to get emails like these every week.
I have some big news, but let’s build up to it. 😉
Starting anything from scratch is scary. Software, jobs, anything really.
I have started from scratch multiple times in my short career, here are three examples where starting from scratch was the right direction to take.
In software, the big rewrite is dealt with a lot of skepticism. Usually for good reasons.
Building a scalable, maintainable and bug free software product is hard. A product that has stood the test of time has seen strange edge cases handled and unique feature requests from users implemented. Starting from scratch means losing all of that.
At my first job, I worked on a software product for doctors that had both of those covered over a very long time. Oh boy, you should look at the billing use cases that this thing could handle.
Over time, the codebase got bigger, the interface got clunkier and the servers got slower. The idea of a complete rewrite was brought up multiple times.
When it comes to tackling tech debt, I’m a big advocate of slow refactoring instead of complete rewrites. Especially, when you start with tests. You get to keep the learnings and edge cases hidden in code.
However, sometimes you end up in a situation, where the base assumptions on which the product was built, don’t hold true anymore. The kind of doctors that shaped the product’s features were now a minority. As the business grew, the product acquired a bigger and wider set of doctors.
The new users were overwhelmed by the number and complexity of features that the software provided.
We tried cleaning up the interface by making the most useful features prominent and tucking the advanced ones inside a few clicks. This made the product slightly less daunting for new users but annoyed the power users because their advanced workflow was now more work.
As more and more feedback started coming in, it was clear that designing a product for two exclusive set of users isn’t going to be easy. As you can guess, the development and testing process wasn’t a cake either, it made us a lot slower.
It was time to rethink the product from scratch.
DHH from Basecamp wrote a great article about their rewrite - they rewrote their entire application not for reducing technical debt, but because they wanted to build a different (better) product from scratch.
Back to us, we spent several months redesigning and rebuilding the product from scratch while keeping the old product running.
It took us a really long time to build it again. But, the end result was really good. I’m convinced we couldn’t have come to the same quality with slowly improving the old product.
Sometimes to get a lot better, you have to start from scratch.
Fast forward a few years at that job, I was helping other teams as the frontend architect. It was a really rewarding role but I missed solving interesting problems that only reveal themselves when you work on a thing for a really long time.
So, I left my fancy architect title to join a different company where my title was literally “Engineer”. Luckily, I didn’t have to take a pay cut but I lost all the decision power I had collected over the years to start from scratch.
I learned a lot by immersing myself into the React ecosystem and setting the quality bar fairly high. If you have been reading the series on React components, I formulated these guidelines while working on the design system here.
It also led to some interesting talks and helped me meet (and make) friends in the React ecosystem.
Again, I could have continued to gain knowledge in the architect role as well, but to gain the depth of experience I wanted, I had to start from scratch.
Here’s how I like to look at it:
When you are on top of a mountain, it sure feels great.
But, if you want to climb a higher mountain, you have to first come down - start from scratch, and then you can start climbing again.
In mathematics, they call the first mountain a local maxima. You have to take the negative slope if you want to find a higher maxima.
Do you have an example where you walked away from a local maxima in search of a higher one? Share it with me :)
I’m starting from scratch again. February was my last month at Auth0.
I work for myself now.
Honestly, I don’t know what that means yet, other than the fact that I have full control over what I work on and how I spend my days and weeks.
I get to carry forward the skills and connections I’ve developed over the years. My salary, however, is starting from scratch. 😅
I’ll be honest, my anxiety levels are touching the ceiling. Walking away from a steady monthly salary isn’t easy, I have to remind myself to be patient everyday.
Having full control over my day has been really liberating though. I didn’t think there would be a big difference than working remotely, but it is!
So, here’s my plan:
That’s all the clarity I have right now.
It’s not very useful, but here’s the contract I have with myself - If I can find a way to make 1000$ every month consistently for the next 6 months, I’d consider this a success and scale up from there.
I’m happy how the first month is going. I scheduled a workshop and the launch of my React Hooks course before the month even started.
Maybe, that counts as cheating, but it helped me focus on shipping and get some money flowing in - which helped with the anxiety.
With the monthly goal taken care of, I can work on some other things that have been on my wish list for a while.
The first one is a newsletter focused on React.
So, I decided to narrow it down to only the most important 3 posts (or videos) of the week. Calling it tinyreact.email.
That’s it for the this week. I have a few articles about testing and accessibility that I want to share in the coming weeks. I’ll keep you updated about the life stuff if you’re interested :)
Hope this was useful on your journey