If you could restart your career from day 1, what would you do differently (or the same)?
Please also leave years experience/current position.
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.
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.
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.)
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.
If you're on the Microsoft stack then Xero and Trade Me are the most obvious choices. Mobile development and Ruby on Rails are somewhat popular. Wellington is a government town, so there's a fair amount of work maintaining legacy platforms if that's your thing.
Quality of life is decent. Good weather most of the time, better traffic management and city planning than Auckland, good food and coffee. The place feels like it has a personality.
You will not be paid well compared to Australians and Americans. The cost of living is lower than in those places, but still high relative to salaries. Food is expensive, housing is expensive, broadband is expensive and somewhat slow, anything you want to import will have to travel a long way which raises the price, and all purchases have 15% GST.
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.
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 of 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 worked in the video game industry for three years before burning out. I let the company I worked for work me 80 hours a week for 2 years straight. I let them because the work is addicting and I was having fun.
When the project I was working on was finally canceled (we never launched), I was given the opportunity to move on to other teams, but to my surprise I just couldn't bring myself to make the transition. I basically spent two weeks browsing the internet instead of looking for a new game team. When I hadn't transitioned to a new team, I was laid off.
I looked around at other companies (inside and outside the game industry) and once again, to my surprise, found I couldn't progress past the phone conversation stage of the interview process. I would schedule technical interviews and cancel them at the last second or simply not show up. This went on for a few months before I simply stopped looking for work.
I didn't work for a year after that. Then I took on short web dev contracts and, between the contracts and my side projects, over the course of another year finally worked back up to a full time 40 hour a week work schedule.
At this point, I'm sure there are people here that would say what happened is entirely my fault and they would be right. I would have been better off had I refused to work more than 40 hours a week and then been fired.
: Fun fact: during that time, I did the math and found what I was making as an hourly rate. My brother works manual labor for the DOT and made more per hour than I did during those two years.
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.
41 with two kids, all that time spent working should have been spent experiencing the world and having a lot more fun.
I think a combination of getting more senior at work and having kids reduces your choices in how you can spend your time (To be fair it opens up new options as well). It highlights the value of your time and how little you got in return for it when it was abundant.
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.
I think this isn't true these days, looking at the salary spreadsheet. In fact, I have friends who are putting in insane workloads building up their own company that would have probably been better spent slaving away at AMZN.
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
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.
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.
1. Push private projects through. Instead of having a playground to use new technology, actually push it to a initial release. You never know what happens to the project and you have something to show.
2. Create more companies. One of my projects went off and turned into a small company that got me a good amount of $$$ until I sold it even though the market wasn't that big for it. It made me realize that there are so so so many people on the planet. The chances of just getting a subset of that as your customers is extremely high. Assuming you have a service that costs $5 a month and maybe 10.000 users (which is not much at all), it already means that you earn 50k/mo that you can re-invest.
3. Do more remote work. The best time I had in my entire career (so far) has been the time where I was able to work literally everywhere I want. That time also turned out to be my most productive time so far. I love my office and I love my coworkers but events come up all the time. What if I want to be in X for a month to experience new year? Or see my family? Or explore another country while I'm young? Remote work is so important for me these days, I would without hesitation give up a good chunk of my salary to be able to do it. (Plus I love working from cafes)
5. Hop less between companies. I was very unfortunate with the companies I picked. My past 3 companies either failed or turned into a management hell that I tried to leave as soon as possible. Now my 3 previous companies are all under 1 year (luckily contract based though) which is extremely bad for my current job search.
6. Don't do everything alone. If you work on something in your own time and it looks crap, just spend money and hire a designer.
7. Don't focus only on Google, Facebook and co. Yes, it would be cool to get into these companies but you might earn a lot more money with more freedom and more impact at smaller gigs. Ignoring these kind of companies is a huge mistake.
8. And lastly: Don't be afraid of being jobless for a few months. It's actually great to have some time instead of directly starting the next thing.
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.
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 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.
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 internet in general is becoming less of a frontier, so yes highly specialized folks have more opportunities but not primary industry guys. Also, the flood of VC into ridiculous startups has distorted the playing field.
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.
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.
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.
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.
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.
1. Find mentorship. Don't be shy of pair programming and code reviews. If you're not getting either (or not getting productive comments that you can learn from) at your job, find a way to get them somewhere else, outside work or at a new job.
I was bad at CS at university and dropped out just as the bubble burst. With a lousy CV in a lousy job market, I took the only jobs I could get. I worked as the lone programmer, or in teams where the only other programmer was way too busy to talk to me, or worked on something completely separate, or was just a grumpy sod.
Even at university the demonstrators didn't generally talk you through how to improve your code; they would read it silently, hand it the corner case you hadn't handled, then walk away without a word. There's a place for that, but there's a place for "hey, have you thought about..." or comments about style or design patterns too.
Meanwhile, the people with good degrees and connections took jobs with mentorship and pair programming. They started out a lot better than me already and they grew and grew, while I'm one of those "one year of experience 15 times" people, hiding in the corner hoping nobody finds out how bad I really am.
2. Be open to new technologies as much as you can: you need to stay used to learning new things as they come along, and you also never know which of the new things is the one that people will still want on your CV in 5 years' time.
1. Make more friends.
2. Have more sex.
1. Be independent in your role. Have opinions. You're hired for your expertise - use it to weigh options, consult with colleagues, and implement a solution. Sometimes your solution works sometimes it doesn't. It doesn't mean a failure, just a learning opportunity. The point here is don't be paralyzed about making technical choices and never make technical choices yourself - if you always defer this to other people then what were you really hired for?
2. It's easy to always say "yes". Sometimes it's important to say no to projects. In the time/money/expertise constraints at your job, some things just aren't possible and everyone in company might not have the same visibility into why a project will fail as you do. This relates to (1) in that you should raise your concerns early as possible if you have them. Then you and your coworkers can make an informed call whether to try the project or not, but this time with better expectations.
3. Try and set yourself up for success. Be honest with yourself about what your skills are and what you think is possible. It doesn't mean saying no to anything you think isn't easy but communicating that you think it is diffcult and proposing an appropriate timeline keeps everyone expectation in line. It sucks sometimes to say that some exciting new idea that will earn tons of money can't happen but it's better then rolling the dice and then missing deadline after deadline. It's also more valuable to the company to know that this a weak knoweldge point and try and route resources approrpiately in the context of that.
4. There's 40+ years to get what you want done. No need to rush things. Try and do some creative hobbies outside work. Be a person you wouldn't be bored to spend time with.
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.
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
Also, depending on your stipend, be selective with clients. If they seem like jerks don't take on the added stress. It's one benefit of moonlighting when you don't NEED the money to pay the bills.
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.
- Never (actually) scold people. Being right is not the point. Moving the needle is the point.
- Sell your startup when a buyer comes knocking at your door.
- Learn sales and marketing.
Nice one. Worth remembering even if you are not a programmer. Thanks.
Would you qualify this as "depending on your goals"? A lot of the advice I read online, I think even some PG wrote, is to not take buyers seriously unless you've actively made the decision you want to sell.
I started a personal care products manufacturing company with partners 2 years ago. I make less money (that will hopefully change in 1-3 years), but I make enough and I'm much happier. This wasnt the case until we recently picked up some very large customers. Business is tough -- I have a great team, but I should not have put so much trust in the veterans in the group. My advice (and what I would have done differently): if you're going to risk a lot of time/money on a project, know the whole project inside and out, start to finish, and the same for your sales channels. Don't let more experienced members say "don't worry, we have that part covered", no matter how successful they are or how long you've known them. Dig until you have every last detail, annoying partners and suppliers as much as necessary along the way. In fact, the more successful your partners are, the less they mind risking a lot of money, and the less ikely they are to spend sufficient time working through important details.
I also wish I had gotten more involved in other projects early on, as my current interests and portfolio are pretty narrow in scope.
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.
1. In the early 90's I walked away from a secure position as an early engineer at a pre-IPO company to try and start a different company with 5 of my college friends. A year later I had no company and no friends. Some people who stayed the course now have 2 more commas in their net worth than I do now.
2. About a decade later I tried again to start a company with a few former co-worker/friends. Things went about the same after two years - no company and no friends.
What I think I learned:
1. While I like to believe I'm so-so at managing technical risks I know I suck at assessing business risks.
2. Don't ever start a business with your "friends". Never start one with people who you don't absolutely trust.
3. You can take a huge hit if you give it your all and things don't work out. You can end up burned out, depressed, in debt and a personal life in shambles. You also miss out on opportunities you purposely ignored because you were too focused on success.
4. For someone like me who prefers being an individual contributor I think job hopping helps more then it hurts. I may have missed some management opportunities but I've gotten raises and promotions faster than those I know who stayed the course.
But overall so far I've had a great career. I may have missed my chance to hit a home run but no matter how weird things got I was fortunate to find interesting work and also contribute to open source efforts which I know benefit millions of people.
1. Don’t be afraid to start over. The problem with largely starting my career at Goldman Sachs was that you feel like you’re running so hard/fast with blinders on. Also, and maybe this is a New York thing, I started to identify myself with my job. I had to learn that I am not my job. All of this made switching friction very high. In my time at GS, Facebook was being created, and Google became what it was today. In reality I was letting the outside world evolve, while I sat somewhere that refused to. I felt like everything I had “built”, career-wise, would fall apart the day after I left Goldman. The reality was that my career didn’t fall apart. But the products/businesses that I built meant less to me, and I was more excited about the future of what I wanted to build. I felt finally unchained. I should have left 4 years before I did.
2. Keep closer to technology. When graduating in 2002 with a Computer Engineering degree, I heard people around me snicker -“Didn’t all those jobs just get outsourced?” It was a bad time for technology, it was a bad time to graduate with a computer engineering degree. Because of my career choices, I ended up focusing more on the business end of things (which still worked out well), but technology is my first love. I love to build things. Now I just do it for fun and hope I can build stuff that people find useful.
3. Be less afraid to fail, take more risks when you can. I played it safe when younger. Focused on making as much money as possible. I love the Elon Musk quote - “Failure is an option here. If things are not failing, you are not innovating enough.”
One thing I'd change I guess, is working more on side projects to actually build things, and get computer science knowledge sooner.
Other than that, I'm quite satisfied with how things turned out and there are a lot of experiences and people I met that I wouldn't trade for anything else, so, I'd keep things the way they are. :)
1- I would have gone sooner with a business that targets an audience I'm part of (HT to Amy Hoy for that). It's hard to fail that way.
2- I would have spend more time thinking about how to have fun. It doesn't happen by accident. We spend so much time designing our business and so little designing our life.
3- I'd have spent more time solving real problems.
1) Small business in Russia 1997-1999.
+ Getting second Master degree in Marketing and Management.
2) Back to programming in Russia.
3) Moved to the US.
4) Contracting jobs in the US and waiting for a Green Card.
5) Job board business - postjobfree.com
Full time since ~2011 (but started part-time in 2007).
What would I do differently:
Skip my second Master degree (Marketing and Management).
While somewhat helpful, it had a significant opportunity cost.
Instead I should have focused on programming from the beginning and moving to the US sooner (~1998).
Join startup (preferably Google :-)) as early as I can.
Create my own startup with other founders (not solo).
1. If you don't enjoy working for the company, quit and find something better. Don't wait for things to improve, especially if you don't have much influence in the company or if you don't see it worth the effort. Trust me, it's better for you, your colleagues and the whole company, your friends and family. This is the most important rule!
2. Don't get stuck in platforms and technologies that you don't find interesting (I'm looking at you .NET).
3. Ask for the salary that you want to get. You are not going to get a raise later, but don't be greedy. (I'm really bad at this)
4. Always do your background work before interviewing with the company. Ask lots of questions in the interview and make sure that it's the place where you want to work before even applying. Interviews should always be also about selling the company to you, not just selling yourself to the company. (This is what I have learned to do)
5. Remember continuous learning and improvement. Learn, learn and learn and do things better than last time. Try out new things as the industry is changing all the time. Also learn during your free time as you don't have time to learn everything at work, but remember to relax and take a rest.
6. Network with people, get friends, be a nice person who can get stuff done. Some day they might do a favour for you if you need help in something, e.g. getting a new job. (This has been very useful during my career)
7. Always work hard to keep customers satisfied and deliver excellent end result in every project. They are the ones that pay your salary and they will give feedback about your performance. Even one failure can cost you a promotion, salary raise or you don't get to do that dream project for an important customer.
8. Be motivated and find out where that motivation comes from. Do things that you enjoy as they keep you alive.
9. Don't underestimate your skills, you are awesome and you can do it. Be proud of your achievements and success stories!
10. When in trouble, ask for help and help your coworkers if they need any help. You are on the same boat.
If I went back and did it again, I would have enjoyed my twenties more. No 80 hour workweeks. No killing myself to meet arbitrary deadlines and please bosses who couldn't care less. I'd also make more friends outside of work, and generally spend more time doing things outside, enjoying nature.
In short: work-life balance. I didn't have any of that until recently. Now that I have it, I can't believe I lived without it for so long.
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'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.
Things I would do differenly:
1) Stay technical longer. I moved into being a PM as I found it more challenging, but learning a few other languages wouldn't have hurt.
2) Start contracting sooner. It is the best thing I have ever done to improve my enjoyment of work, as well as being more lucrative and advancing my career.
3) Get a mentor when it could have made a difference.
Another to add as of two weeks ago - start learning marketing earlier.
I'd have started and finished at the same university; moved to SF in 2005 immediately post-graduation; generally I would have taken on more risk. This would have essentially allowed me to semi-retire by now.
What went right:
- Hopping jobs early. I managed to roughly quadruple my salary over the first few years as a developer by switching between companies in a hot job market (though nowhere near as hot as the one today). A couple of those were "perfect company" type jobs where I could have comfortably stayed my whole career and had fun. But my value was rising quicker than they could match, so I had to move on. That seemed mean at the time, but was absolutely the right thing to do.
- Moving to contracting. Cause they pay you twice as much per hour and you can easily move on when the contract ends.
- Negotiating. I figured out early on that a good developer is worth more to a company than a company is worth to a good developer. Over time, I got more and more confident at insisting on being paid accordingly. Was constantly and consistently amazed that companies would agree to pay pretty much any number I could say with a straight face. Thought up some bigger numbers and practiced saying them.
- Living cheap and light. So that it's easy to sock away lots of personal runway and not have to worry so much about the consequences of not having a job for, say, an entire year at a stretch.
- Traveling between contracts. For like a year at a time, on account of all that extra money that contracting pays you. Reaping the payoff from that light living.
- Going Remote Early. I started taking freelance gigs with me on overseas trips, being that "guy on the beach with a laptop" well before that was considered something you could actually do. Today, you can pretty much start your career there and never see the inside of a cubicle, ever. So definitely jump on the opportunity if you see it.
- Building SaaS businesses on the side, running them until they bring in a respectable developer salary, then ramping down the contracting.
What would have made it better:
- Start the SaaS part earlier. I actually made a few attempts early on, but never followed through to collecting real payments from real users. Instead I build Cool Side Projects of the sort we still (sadly) see lots of here. They were fun. But you know what's even more fun than a Cool Side Project? Never having to work again. Would have been nice to have that happening ten or fifteen years earlier.
- Network better. Life would have been easier if I had an assured supply of high-rate gigs to pick from out of a network of previous employers and co-workers. I burned a few years on the "treadmill" trying to re-bootstrap that after leaving industry. If you can avoid ever having to log in to the eLances of the world, life will go a lot more smoothly.
- Focus on skill & value over savings. I saved a bunch in my 20s, before my bill rate was anywhere near what it is today. Looking back, I probably could have put most of that into personal runway rather than retirement savings. I go back and forth on this one, since I doubt I would have had the confidence to piss off for entire years at a time traveling if the bank balance was really that close to zero.
 Capsule summary: ~20 years, startup employee to contractor to traveling dirtbag climber who very occasionally contracted for a few months, to small business owner, to dad with a full time remote contract gig for almost 5 years, to mostly retired small business owner.
1. education - mix telco and software engineering -> would change - got to just one specialization : software eng.
2. education (continued) - business and economics -> let it the same. It got me a lot. General overview about world, business, management etc.
1. Almost 9 years in IT business
2. My main issue is switching position and domains -> good and bad, unfortunately I don't know if I would change it.
--> Good is that I have wide range of skills and knowledge. I can transfer and share them in different environments, detect hidden issues, suggest improvements. It proves my flexibility. I observed I like teaching, explaining, drawing, solving puzzles and real-life issues.
--> Bad is that level of my deep expertize is nowhere. I am just another generalist. (Un)fortunately I found out that I hate management jobs where I had to chase people, reply to silly emails, escalation, read and rewrite reports and send to upper layer. Personal communication is other story. I love discussing with people about real-life/business issues and bring solutions.
3. I have tried 4 various 9-5 positions - telco, software (QA), networking (security), customer contracts management (current, non-technical, boring but well paid). Salary is raising with switching. For me 2-3 years in one company is enough. Usually, there are no option for rapid pay-rise. -> let it the same. It is the easies way how to get higher salary.
4. I have wrote 3 technical books. Good just for reference and bonus points in my CV. Get to interview is much easier. Downside is huge time consumption. --> Change it , i wouldn't do it again, at least not 3-times. It took me around 1000 hours/book with around 0.15 cents in revenue per book.
5. Almost all jobs were my own success in hiring process. --> Would change it. I would do more networking with people. It's much easier to get interesting job when you know right people. Everything publicly available is rubbish which closed-groups filtered - jobs, real estates, cars.
6. I would work less and spent more time with hobby and personal development - rhetorics, art of problem solving, story-telling...
7. I would work less and spent more time to develop relationship with spouse.
8. I have own company for side projects and some additional income -> let it the same
All in all...I am satisfied with it as it is. Despite of issues.
I observed one sad thing. I always will know what was wrong in my current way. I will have list of thing I would did differently. But this is useless due to few reasons:
1. If life would go different way, I would have different experiences, different issues but still the same mind. So in results I would be in the same situation thinking what I would did differently.
2. It doesn't matter what I did and didn't, there are and always will be things which are good and sucks. All my decisions were made based on my mental state, experiences, desires, expectation etc.
3. Bad things moves me forward since. So without bad things I would be there where I am now.
It's a differentiator, all other things equal. But it's not "insurance."