The year was 2007. I was a college student attending a 24-hour hackathon where we had had to build something on top of live trucking data. We were given an API that sent GPS and other metadata for 100 trucks roaming across Europe, the data updating every five seconds.
I entered the competition with friends, and we built some basic visualization in those 24 hours. It was passable, but not something I was too proud of.
The event was won by my brother and his two friends, who also competed at the hackathon. They built a visualization of the trucks moving on top of Google Earth and Bing Maps in a way that you could switch between maps and various visualizations. This was mind-blowing stuff back in the day, as there was no public API to build any of this. They used an undocumented API that would fetch parts of the map and built their business logic on top of this custom-made engine.
"How did you manage to use both maps and do this so fast?" - I asked him. I toyed with the idea of creating something similar but quickly gave up after I saw there were no APIs to do so.
"Oh, we did a similar kind of work a few months before for a contract. The client never paid, even though I spent a week understanding the APIs, finding workarounds, and building the prototype engine. I was pissed at the time, but I'm glad this work eventually paid off as an investment - even if a different one than I imagined."
Could work that seems like "sunk costs" on the short-term really be an investment for the long-term? This example certainly proved it.
This was the first time it dawned on me that there's more to work than getting immediate rewards - on top of being paid or rewarded on the spot, you can create longer term investments.
Ever since this example, I've started to challenge my thinking of "sunk costs" in cases where my "sunk" efforts can help in the long-term, even if it's a failure in the short-term.
Software Engineering Interviews as Career Investments
Software engineering interviews are a great example of the investment mindset where in the short term, you can see them as sunk costs, but in the long term, they are investments.
I've heard countless people complain about how it's not worth putting time in preparing for coding or systems design interviews as it's a sunk cost. How even if you spend weeks or months on this, you might still get rejected by the one company you applied to.
But thinking of interview preparation as an investment: was it worth spending weeks or months to master a specific set of interviews? After all, engineering interviews at similar types of companies are similar enough. If you prepare for the Facebook software engineering interview - similar to how I did in 2015 - , even if you fail at it, that same preparation is an investment in your interviewing skills for other companies.
Treating interview preparation as an "investment" over a "sunk cost" greatly helped my career. When I moved to the UK, I spent months preparing for Google-like interviews, in 2009, using the Stanford course Solving for the CS interview as preparation resources.
Most of the companies did not ask me to solve algorthmic challenges - except for one company, where I ended up getting and accepting an offer. I only learned in hindsight that this was one of the most difficult companies to get into in Edinburgh. I only succeeded because I invested my time upfront.
My story of getting into Uber is a similar one: I am convinced I able to pass the interviews as well as I did because I invested months a year earlier to prepare for the Facebook interview. I wrote about my Facebook preparation in detail in this series of emails.
Treating All "Work" as an Investment Opportunity
I started to think about my activities as investments instead of a means to an end, and my approach changed. I started to ask myself, "what can I learn from this activity, even if the outcome is not what I expect?". Questions that helped me decide whether or not to pursue an activity included:
- What experience would I gain from this project, even if I get paid less than my normal rate - and thus, I'm investing some money to do the project?
- What skills would I build on this team, even if changing teams mean I definitely won't be promoted the next year? This means I'm investing my time in this team - and possibly some money (with a promotion I could have otherwise gotten).
- What other people would I connect with by helping organize this conference, even if the organizers are unpaid? I'm investing my time in this effort.
- What new ideas might I get from writing this article, even if no one reads it and I've invested my time?
- What learnings would I get from my mobile/web app, even if I had very few users and I've invested my time? How much more experience would I gain if I invested my money and made it free - trading money for more users?
Using this "investment mindset", you can justify "loss-making" activities that many people would dismiss because they don't have obvious returns. Working on open-source projects. Writing your blog. Volunteering to help organize a conference. Releasing a quality app, service, or book for free - and many others.
The Career Advice I've Been Subconsciously Following
There is a lot of career advice that has not resonated with me, from discouraging people from doing free work to maximizing your income (salary, side projects). But there's a principle that I have been following, subconsciously, that has served me well. It's this:
Don't be afraid to invest upfront. Invest in ways you cannot make a loss. Invest your time like you would your money.
A software professional's career can easily last forty years, and there are a wealth of small and large investment opportunities you can make.
These are opportunities that most people associate with "free work," "not worth my time," or "worthless distraction." However, for certain people, they are investments with little downside but major upsides.
My "investment evaluation criteria" is something along the lines of these questions:
- Have I done this before? If not, can I learn something if I do it?
- Can I spend only a little time on it before committing further?
- Can I meet interesting people by doing this activity?
- Is this something most people like me would say no to? If the answer is yes, I often push myself to consider it a bit more and come up with good reasons why not do it. There's a very real herd mentality among large groups of people, and going against the "crowd wisdom" is an underrated way to gain novel insights.
- Can I stop doing it if I don't like it? I hate committing long-term to things that don't work out.
Investments that Worked Out
This "investment mindset" has kept paying dividends for me - sometimes years later. Here are some of my "investments" that were not successful - or profitable - in the short term, but they brought outsized value the long term.
Investing time building a social app on a small Facebook competitor that everyone ignored. While everyone I knew was building Facebook apps during the "apps gold rush", in 2009, I decided to give a Hungarian social network iWiW a go that just launched its app platform.
I was thinking: what do I have to lose? The time I spend on the project. What do I have to gain? Experience building an app and a fair chance to build an app that can become really popular.
It turns out very few people took a risk on a new app network - by being early and investing a few weekends, I created apps serving 1M users while I was in college, including more than 200,000 users on New Years' day. This gave me incredibly valuable learnings on how to build reliable distributed systems - as my DIY database setup crumbled under the load.
Building a Windows Phone app in the middle of the iPhone apps gold rush. In 2010, iPhone apps were taking off. Microsoft announced joining the smartphone race with Windows Phone 7. I decided to target to have an app ready for day one: a cocktail app. I had the database already with my website, and the concept worked.
What would I lose? Time spending on this. What would I gain? Experience building native mobile apps and being on a new App Store early on.
Teaming up with friends, we launched Cocktail Flow - which became one of the only apps that were better on Windows Phone than any other app on iPhone or Android. I met many fellow Windows Phone developers, was invited to speak at meetups and conferences, and had a lot of doors open. All because we built a high-quality app early and on a platform that most other developers ignored at the time.
This app led to Skyscanner first becoming a client of Team Distinction - a company formed by the other three friends helping build the app - then acquiring their company later on. It also led to Whatsapp co-founder Jan Koum reaching out to collaborate later on - an opportunity that - in hindsight - I should have said yes to but passed on.
Saying "yes" to starting from scratch on a new technology. When I applied at Uber, the recruiter messed up my interviews. Instead of interviewing for a mobile role - I was doing iOS development - I was put on a backend loop. I went along and cleared these interviews, to the amazement to everyone - including myself.
The reason I was able to do well was that in the past I said "yes" to learning new technologies. When I was working at Skype, I volunteered to help work on the backend of Skype on Outlook.com, even though I was a frontend engineer by title. I needed to learn a lot, and my performance review and promotion prospects probably suffered due to me getting up to speed. But it helped me gain hands-on experience building a backend that served in the range of 10,000 QPS and 400 million monthly users.
Writing a book. Everyone who has written a book - including me - will tell you that it's just not worth it financially to do it. If you do the math: the hours you spent on a book come to below minimum wage for 99% of the books written.
However, writing a book also forces you to research a topic really well. By doing months of research while writing The Tech Resume Inside Out, I probably know more about what makes a good software engineering resume than 99.9% of other people. At the very least, I've spent more time on this niche topic - CVs for developers - than almost anyone else in the world.
As I was writing Building Mobile Apps at Scale, I learned about things I wish I knew earlier, like pseudolocalization. I also connected with people heading up large mobile teams at well-known tech companies and got far more involved in the "large scale" mobile apps community than I ever thought I would.
Cutting Poor Investments Short
With any investment, you put in resources: time and money. It's not wise to keep doing this indefinitely, especially when the results are not clear. Many of my "investments" were not worth it: either they were too painful in the short-term, or I just realized the long-term benefits are not relevant for me.
Maintaining an open-source project turned out to be far bigger of a burden than I expected and with no real upside that was relevant for me. In 2012, I open-sourced an ad-rotating component for Windows Phone that helped maximize my ad revenue. I figured this might help others make more money in their apps as well, and intended to offer it as a "works for me" approach.
Soon, I was overwhelmed by support requests to make the component work for use cases I didn't have and did not want to support. These were fellow developers who opened issues and expected me to fix them, all while the fixes would have helped them make more money. I didn't like this setup. Luckily software engineer Simon Jackson, stepped up to maintain the project and did a fantastic job throughout the next years. I learned that open-source maintenance is not my type of investment.
Organizing a conference was an activity that I'm happy I did once: only to learn it is not something I personally want to do. While I did meet speakers, I didn't feel positive about the experience due to too many moving parts. For every other "investment" I did, I liked doing it. Perhaps the long-term efforts would be worth it, but I decided this type of activity is not for me, at least for now.
My "investment mindset" and enjoying what I do go hand-in-hand and saying no to things that bring stress, anxiety, or negativity are important in keeping up with this approach. Daniel Vasallo has a "small bets" mindset where cutting these "bets" short is trivial, as the effort you put in them is small enough.
My Next Investment
I find the investment mindset and the entrepreneurial mindset to be connected. Making an investment involves a limited risk: you might lose all your invested time or money. It also involves a much less limited upside: your investment might repay itself multiple times.
This mindset is very similar to starting a company - except the stakes are higher. When starting a company, you're investing a lot more time, and a lot more money than with some of the "smaller" investments.
What is the activity you're investing in that makes no real profit in the short-term but can have good upside in the long term?
Featured Pragmatic Engineer Jobs
- Manager, Web Engineering at HashiCorp. $136-173K + equity. Remote (US).
- Manager, Web Engineering at HashiCorp. $123-180K + equity. Remote (US).
- Lead Frontend Engineer at Rooser. £100-120K London (UK).
- Software Engineer at Rooser. London (UK).
- Senior Frontend Developer at ePilot. €50-90K. Köln (Germany) or Remote (Germany).
- Senior Full Stack Engineer at ePiilot. €60-95K. Remote (Germany).
- Software Engineer at Air Space Intelligence. Boston, MA (US).
- Senior Full Stack Engineer - Developer Experience at Synthesia. €100K+. Remote (Europe).
- Senior Full Stack Engineer - Growth/Collaboration at Synthesia. €100K+. Remote (Europe).
- Senior Backend Developer (Python) at Octopus Kraken. Berlin or Munich (Germany).
- Senior Python Developer at Octopus Kraken. Paris (France).
- Senior Product Engineer, Frontend at Attio. £90-125K + equity. Remote (Europe).
- Staff Full Stack Engineer at POSH. $170-220K + equity. New York (US).
- Director, AI/ML at Sixfold AI. $195-225K + equity. New York or Remote (US).
- Founding Engineer (Full-Stack) at Strada. $140-190K + 0.5-1% equity. Remote (Global).
The above jobs score at least 9/12 on The Pragmatic Engineer Test. Browse more senior engineer and engineering leadership roles with great engineering cultures, or add your own on The Pragmatic Engineer Job board and apply to join The Pragmatic Engineer Talent Collective.
Want to get interesting opportunities from vetted tech companies? Sign up to The Pragmatic Engineer Talent Collective and get sent great opportunities - similar to the ones below without any obligation. You can be public or anonymous, and I’ll be curating the list of companies and people.
Are you hiring senior+ engineers or engineering managers? Apply to join The Pragmatic Engineer Talent Collective to contact world-class senior and above engineers and engineering managers/directors. Get vetted drops twice a month, from software engineers - full-stack, backend, mobile, frontend, data, ML - and managers currently working at Big Tech, high-growth startups, and places with strong engineering cultures. Apply here.