6 years interning as a software engineer, 2 years as a PM at Microsoft, 3 years as engineer #10 at Palantir, 3 years at my own startup, 5 years working as a partner at YC
1. Work on products that other people would find useful, and then be sure to release it. Early in my career I was a contract software engineer for an agency. I was selling my time instead of making products that could be resold with zero marginal cost. I would have focused on making products sooner.
2. Either learn, or earn. The best jobs frankly are both. If you're learning, it's OK if you're not getting paid as well, and ideally it's not forever. If you're not, then you better be earning valuable equity at a company that matters. Investors get a portfolio but you only get one place to work, so it's even more important that you invest your time in a place that matters. I would probably not have worked at Microsoft knowing this. I wasn't earning or learning at the time.
3. For a while, I decided I wasn't going to code anymore. That was a mistake. Thank god I ended up picking up software engineering again. Don't ever stop coding, even for a fancy title like program manager. If a job has a fancy title, the job probably sucks. Writing software is very high leverage, and more meaningful than writing a lot of emails.
Couldn't agree more about not exiting software engineering completely. Had this experience at a prominent tech company (wherein promotion = no more coding) and it became so bad I had to walk away.
I'm trying to tailor my career now to be primarily programming-oriented, but with opportunities to explain ideas/concepts and think about value creation. A relentless focus on creating business value is a huge differentiator in software engineering.
10 years as a Software Developer here. Based in Wellington, New Zealand.
1. Change jobs more often. The only way to be paid market rates is to change jobs when your market value increases. Your employer has a strong financial incentive to keep you working as long as possible at your current rate.
2. Move into management quickly. I've heard it's different in other parts of the world, but where I am being a developer limits your career. In every software company the people who are the most influential, and the best paid, are in management or sales.
3. Be more aggressive about getting side projects finished and getting them out into the world. Like many developers, I've got a bunch of half baked ideas on my hard drive that could make decent open source contributions, side businesses, and there might even be a worthwhile startup buried in there somewhere. When all your publicly visible code is your employer's intellectual property, it makes it harder to sell yourself.
> In every software company the people who are the most influential, and the best paid, are in management or sales.
I don't think that's necessarily true in Silicon Valley, where companies like Google, Facebook, Airbnb, Uber, etc. have parallel career tracks for individual contributor vs manager, with equal salary bands. I'm earning way more as a high-level IC than mid-leveled managers.
What's the market like for a software engineer in Wellington? Was in town a few weeks ago and loved every minute. Raglan Roast has got to be one of my top 5 coffee joints of all time!
I think it's a mistake to think you're going to find the magic "right path" for your life based on what others did or wish they had done. Everyone is different, and your own path will be based on your unique abilities and desires which are different from anyone else's.
Generically I would advise, research your options, make the best decisions you can, and don't look back. If you end up unhappy with something, change it. Always be ready to answer "what would it take to hire you away from what you're doing now" because you never know when the question will come.
26 years in computer technology and software, experience in academic large enterprise, mid-size business, and a couple of startups.
I am with you. "What was your best career move?" Is probably a better question. But even then difficult to translate to other individuals / location / times.
1. Learn to sell. The single biggest hindrance to my career to date has been not learning how to sell myself and my work to management. My entire life I was always told that if I did good work I would be recognized for it. That's a big fat lie, especially in a field where your manager doesn't necessarily understand what it is you do. Sales is also applicable to everything from finding a new job to freelance to consulting to selling side projects. It's probably your most important skill, bar none, even programming.
2. Pick an industry to specialize in, not a technology. Basically, be an X who can program instead yet another JS programmer.
3. Stay away from the video game industry.
4. Always take care of your mental and physical health first. Burning out blows.
I'm a self-taught programmer with around 15 years of experience. (I studied physics)
The one thing I really miss from not studying computer science is a network of programmer friends. It's a lot harder to meet new people after university. I'm currently trying to hire my first employee, and the advise I usually get is "hire your friends from university" -- but that doesn't work if non of them are programmers.
You can meet new people at meetups etc, but it takes a lot of effort.
You can meet new people at meetups etc, but it takes a lot of effort.
I'm running up against the same walls, too, when I go to local user group meetings. Then I also find out my interests are mostly different from theirs.
I'd still do crazy stuff (I've done about 5 individual things which were relatively risky -- running away from home/dropping out to go to college early w/o any money or financial aid, offshore ecash, datahaven, 3 separate warzone projects, a startup (lowest risk thing BY FAR)).
I got trapped in some of these and couldn't leave/do something new once it was clear the thing should end, because I didn't have the resources to do that (i.e had no real money whatsoever). Figuring out a way to get around that would be high on my list -- bailing on HavenCo in 2001 to join Google would have been a great choice; bailing on the warzone stuff in 2006-2007 once I'd learned everything I'd wanted to learn, to go back to doing a startup, would have been the right choice.
20 years professional experience, almost 25 years programming in general.
I would've attempted to build something cool instead of build stuff for other people. I realized very late in my career that there was more going on than the agency life - at one point I was even chasing the big agencies. I built fun little joke sites, but never attempted to build something that could've been a business. Reading "Founders at Work" really opened my eyes to what I could've done back in the day -- and while it's not too late, it definitely feels like I missed out on a lot of opportunities.
I want you to erase the notion of "missed opportunities".
Re wind the clock a scant 16 years. Linux was barely a thing, you were buying servers from sun, putting them in a cage to "start up". There wasn't really a way to be technical and be "ramen profitable".
Look at the environment now. You can start up a SaS business with the skills you have acquired, and probably what you spend a month on coffee from Starbucks, or a few lunches out.
Just build something, then go build something else, keep building things till one of them starts to get traction, and then iterate on that... wash rinse repeat. Will you get rich? who knows? But the more arrows you shoot, the more likely you are to hit a target.
It has never been easier to just do something than it is today.
The biggest regret I have is taking a string of 4 jobs that all sucked, and sucked the life out of my enjoyment of programming. I lost about 6 years to these shitty jobs and it left me demoralized and depressed. But then I took 1 year off, which did wonders for me, I suggest it for everyone at least once in your life.
I should have focused more on becoming an architect instead of a front-line programmer, so that I would have a higher-ranking position now. But I moved around too much, and every time had to keep proving myself, which stunted my career. There's a fine balance between moving around to get better experience, and sticking around to level up in rank.
That said, I still love programming to this day, and feel blessed that I got into this field that pays so well and gives me a lot of freedom to move around.
11 years as Web Developer. As they say, hindsight is 20/20.
1. I would have pushed myself to really harden my understanding of the languages and frameworks I've used over the years. I usually get a cursory understanding and then just dive in. I should have, and still need to, continue to read, learn and keep up with ongoing changes and new practices.
2. I'd learn to negotiate sooner. It's never "work" when you do what you love, but then - yeah it is and you should be paid what you're worth.
3. As someone else said, push myself to finish side projects. I doubt I have any real moneymakers lying around, but I also have hardly anything to show for 11 years of work as it's only been with 3 companies and more than 4 years of that was not consumer-facing work. I still want to put something out there that I can proudly show off and say - I made that.
4. I had an opportunity to move to California (was in the midwest at the time) at one point and do basic entry-level database stuff for a friend. I backed out because it was a huge change and I was scared and I had just come off being an IT director and probably wanted something higher paying. Going back, I think I'd probably take the shot and see what happened. As the kids these days say - YOLO
5. Contribute more to open source. Both to give something back and to try to cure my ever-present imposter syndrome.
6. Definitely dive into mobile sooner. I'm a developer, not a designer, but I still have to throw together sites now and again and even the mobile-friendly aspect of bootstrap evades me. Responsive? What? It looks good at 2560x1600!?
7. Finally - and perhaps most importantly - BACKUP, BACKUP, BACKUP! Lost all my user data on a ramen-profitable side business that I managed to get going before I ever got my first professional gig as a programmer. Host corrupted my database and didn't backup either. I can't even remember who it was now, but this was 2004/5. I will forever kick myself for that one.
I wouldn't work 50-60+ hour weeks. I'm 36 now with 2 kids. I've come to realize that all that time I put in really didn't do much at all for me. I'd much rather have my free time back then make someone else rich.
31 with one kid here (less than a year old)... I agree completely. Although I haven't done bad for myself financially I often feel I spent my 20s working 60 hours weeks and delaying gratification only to have the gratification not worth it. What little you get in financial return and notoriety is not worth going 10 years of your life doing nothing but sleep and work.
1. Looked for more work while I had work. Even these days it's easy to get into the work-home-sleep wash repeat cycle and forget about the next gig.
2. Committed to the top tier company that wasn't leading me along with bread crumb contracts. That company was artist driven and I kick myself for leaving over software preference.
Same:
1. Continued to push my social circle outwards, go to company events and hang out after work with 'em.
2. Doge overtime as much as possible. after 40 hours a week adding more time behind the desk neither improves the quality, speed, or beauty of the work.
After 30 years in the Software Business I agree with many of the comments:
1. Build your own company early on if possible. Only way to really make money.
2. If you must work for others change jobs every 3-7 years. And take your equity with you. The company's success or failure will not depend on you. Really it won't. Companies by their very nature are designed not to depend on individuals.
3. Learn to manage people. Hard job - your success depends entirely on the success of others. Talk about uncomfortable.
4. VC investment is the not the only way to fund your company. VC need the next MS or Apple etc to exist. The chances of you pulling that off are equivalent to buying a lottery ticket. The chances of you creating a company that makes a small number of people an above average return is quite good. A VC will find that a waste of time and exit leaving you with nothing. VC ask you to do something they are unwilling to do. Invest all you capital in one risky venture.
5. Don't be greedy. Easier said than done. If you can get a couple million for part of your equity now and live modestly but comfortably - do it. Freedom is everything - anything more is gravy. If the company does in fact take off the small bit of equity leftover will pay off big anyway.
15 years as a Software Developer. Mostly freelance, with 5 years at a relatively successful [acquired] startup, and now back to freelance.
I would have managed my money better. Not that I spent every dime on B.S., as I'm naturally frugal. But I would like to have had enough put away so I could spend more time working on personal projects, and maybe have more stretches of time to dedicate to hobbies.
Otherwise, I've had a very long string of luck and opportunity that allowed me to work on fascinating projects with consistently talented and interesting people, so I'm not sure I would have changed much else.
Writing code for 20y. "Official" workforce something like 10y. MS and PhD in Comp Sci. Software Dev as a part of research project during that time, so 6y there. Day-jobbing as a developer now for ~3y. Freelancing for the past 6-7 years part time.
Knowing what I know now, I'd have started freelancing earlier in grad school, I missed out for most of the MS. Once I started that finances got easier and lets face it I had plenty of free time before I had kids (even with all the research).
I'd probably still do the PhD, I enjoy the intellectual stimulation that comes from science + programming. It's a nice change of pace from the apps and enterprise software I work on while freelancing
The most surprising thing to me is how I feel about math and academic subjects.
First decade in the workforce I thought math and academic CS were kind of a waste of time - it was so easy to be productive and respected as a programmer without it, just by using logic and thinking.
But... as you get more senior and start dealing with concurrency and distributed systems, surprise! Mathy stuff is valuable. Big-O stuff, but also just recognizing what different scales feel like. It's weird to realize that things like e and ln are all of a sudden directly relevant to life.
It's disappointing that a lot of math classes in college never seemed to focus on the intuitions of what those concepts feel like. Anyway, I would have spent more time earlier on getting facile with mathematical thinking - critical thinking, bayesian reasoning, advanced math, etc.
I came here to say this, but you put it perfectly. It's amazing how I got through so many years before truly respecting and wanting to learn more math. It's been a huge focus now that I've worked the trenches long enough to see the real value.
15+ years of software here. Currently a CTO of a reasonably successful startup.
What I would have done differently...
1. Spent more time working on my own ideas and less time on other's ideas
2. Exchanged W-2 work for 1099 work to give myself more flexibility to do #1
3. Stayed in the city longer before moving to the suburbs
4. Spent more time outside
5. Spent more time working out and eating right
6. Spent less time working
One thing I would not have done different...
1. I still work have gotten my Computer Science degree -- even if I could get a job without it, they were some of the best 4 years of my life and I met my wife there
I'm in a state that honors broad non-competes and invention clauses and it is virtually impossible to find a software engineering job without one attached to it.
1099 work would give me more freedom to pursue other tasks while still doing work for other companies.
Also, you can't tell a contractor what hours to work. So I would have more leverage to set my own hours.
Edit: if I was in a state where non-competes were generally unenforceable it would probably be a different story.
If I restarted mine knowing what I do now, I would have been honest about what I was passionate about with myself and went after that. I took a meandering road to return to what I loved doing when I was younger (programming, hacking, etc). I spent alot of time worrying what others thought of my choices and acting accordingly, instead of worrying what I thought of myself and acting accordingly. I've been working in software engineering/data science/data analysis for about 5 years.. before that, my career path of 8 years or so had little to do with math and computer oriented work, although I was interested in those things as a kid and teen.
10 years in IT altogether with 7 of that as a Java web app dev and currently in my 3rd year of integration design / integration development. I've thought about this a number of times and I always come back to the same conclusion: I would have spent less time in a position where I wasn't advancing. I got settled it and while the work was enjoyable, it also wasn't overly challenging. I think I would have reviewed my growth more often, say every 18 months and looked for other opportunities if I felt I was getting complacent. I spent 3 years at IBM doing maintenance work of a CRUD app starting in 2008. Android was just coming out. I should have jumped into it with more gusto.
I've been at my current gig for 14 months now and I'm learning a lot every day. I do little coding these days at work, but do a bit at home just because I still enjoy it.
I don't have an actual career (yet), but I've been programming as a hobby for a few years now. What I really wish is that I had never deleted some of my earlier projects. They weren't that great, but they weren't terrible. I regret getting rid of them, because they would have been nice additions to my limited portfolio.
I also wish I had gotten more involved in other projects early on, as my current interests and portfolio are pretty narrow in scope.
18 years in Director of Engineering for the last 8, various engineer titles before that, mostly in small to mid sized startup web shops.
The thing I wouldn't change: working for organizations in transition. I have learned to love the words "migration" and "re-platform", I love the (growing) pain(s), I love change.
The thing I would do differently: Taking the "next job" rather than waiting for a job I know I will love.
I would have made a case with my parents for pursuing either a Computer Engineering or a Computer Science degree, and graduated with one, no matter how many years it would have taken.
I would have also pushed them further to purchase even a mid-range machine to learn all this on, despite our financial difficulties back then.
If I made these decisions early on, I know I would have taken a different path. At least, it wouldn't be the mess I'm in now.
I'm about two weeks from graduating with my bachelors degree in university. I'm 25. If I could change anything, I would have gotten more focused on attending university sooner so I could finish sooner. I'm not disappointed in myself, but I would have at least given myself three more years.
I wish I stuck to things I really love (programming and data analytics). After 10 years of switching goals to the most trendy careers of the day, I unfortunately realize that my start was actually the most suited for my interests, personality and skills and in retrospect had the maximum potential of a very financially rewarding payoff profile
- I'd quit my first job earlier. I stayed there for 10 years - should have left at 5. Things went gradually downhill after that.
- Spend more time building longer-lasting projects. I kept doing freelance work on the side for quick and small amount of money instead of using my free time to develop something that would benefit me in the long-term. I can't even remember those freelance projects.
~12 years of professional experience: 3 as a translator/researcher, 3 as a salaryman, 5 (full-time) as a bootstrapped solo software entrepreneur, 1 as CEO of Starfighter (current gig).
I go back and forth on this one, as I know why I did it, but: I burned way, way too many years on two jobs which were dead-end and not teaching me at sufficient velocity to justify the use of time. In hindsight, it would have been a better use of my time to be in a different organization for those 6 years. At the time I felt like I was optimizing for personal growth and figuring out this adulthood thing but in the clarity of hindsight I'm pretty sure I could have found that out while not being miserable for 90 hours a week.
I should have aggressively applied for jobs early in my career, including jobs I felt were likely to turn me down, rather than constraining my own choices to places I thought I was reasonably well-qualified for. (Specifically, I should probably have applied to Google, and AppAmaGooFaceSoft for that matter, immediately out of college and regularly afterwards.)
I was happy and pretty fulfilled with running my own software company, but I would have been happier, more fulfilled, and more successful with a better choice of projects for my 2nd major SaaS. In particular, rather than doing "a good business which I know that I will not be terribly interested in", I should have taken Peldi's advice and done something which both pinged my interests and made use of the various forms of capital I had built up prior to then. (Perhaps email marketing software or something else targeting the software industry, rather than something which helps you if you're the office manager at a dentist's office.)
With regards to Starfighter: we decided to bite off two very ambitious development projects then run a boutique recruiting firm. We should have run a boutique recruiting firm for 3 months, then done one not-very-ambitious development project, folded it into the recruiting firm, and then ramped up recruiting and development in parallel.
Things I'm generally happy about:
Skipping grad school.
Choosing to write down what I was learning while I was learning it: A++, would write 3 million words again. If I have a regret here, it is not writing more the last ~2 years.
Side projects: lifechanging for me.
Getting exposed to a variety of people, companies, and problems by doing consulting, while also getting paid handsomely to do it: great decision. (Probably should have banked more while doing it rather than assuming I would always have a consistent income level and choosing to overspend on some things.)
Bonus round: Definitely, definitely say yes if Thomas Ptacek invites you out to coffee. (We met for the first time in late 2009. That conversation altered my trajectory to consulting. A similar conversation in late 2014 resulted in Starfighter.)
Be a lot more critical of "expert" opinions. Including legal and medical.
I have some smart friends who got stoned now and then. They seem to have ended up happier.
Even the one who was nearly lost to it, wholesale. (And who's still struggling, but hopefully on the upside...)
At least she lived her life.
Me? Too scared by the rhetoric. Too anxious from the bullying. Ultimately, a mountain of regrets.
As they say, better to have really lived, briefly, than to have suffered long.
Go out and live. And, those who seek to scare you -- if you look closely and eventually gain some perspective, it turns out to be for their benefit. Fuck them.
Yeah, and do what you fucking want. Just realize that it's not always how you make a living. Sometimes, you find a way to make a living, so that you can then do what you want in your free time.
P.S. Yes, this is career advice. As in, make sure it's your career. And then, make the most of it. Whether it's one thing, or a dozen.
to build authority in the fields that interest me, and use it as a marketing channel for launching side projects. Long term blogging is career insurance