An evolution of a career
I've had many jobs in my lifetime, which has taken me on a very non-traditional career path. Based on my past experience, I bet I will have many more varieties of jobs. Software Engineering and managing probably won't be what I do for the rest of my life, but I don't know that for sure.
This post is for me, to help me remember what I felt like in each of these phases. I want to see what comes out of it, but also to hopefully share my experience with others.
When I was younger I was sold the narrative that in order to be successful you went to college, got a job, and worked in that field for your whole life. Both my parents did that, and by many measures they are successful. My sister has worked in healthcare her entire life (veterinary medicine and now nursing). I have not followed that advice, because it never felt right to me. Hopefully in this process I get to show others that it's okay, or even common to have a lot of different jobs.
Ultimately, I'm trying to find a job that really matters to me, where I can feel fulfilled, continue to grow, and do so in a sustainable way, ideally for the rest of my life. If I get paid well that's great, but it's not my top priority anymore. If this means I have to keep switching jobs until I find the one, then that's okay too.
Before my "professional" career
The first job I ever had was working at Party Depot. I was 15 or 16 maybe. I worked one Sunday, mostly filling up balloons and restocking returns. Later, I got my schedule for the rest of the week and I didn't like it so I never went back. I also never got paid for that 5 hours because I hadn't even filled out my HR paperwork. It's been over 20 years and I don't think I'm ever gonna get that money from them. Also that store is now a Walgreens. There is no lesson here, I was a lazy teenager.
Second job was working for Geek Squad at Best Buy. If you don't know what that is, basically think of a bunch of nerdy young men wearing clip-on ties who sit in the back of the store waiting to fix your computer. Through some mysterious arcane process, you could work your way up to being the guy who visits peoples homes. They would give you a liveried VW Beetle which seemed like such an astounding level of privilege and responsibility for an 18 year old.
In general, I liked this job, because I like working on computers. There was only one major problem: I never received any training. I knew how to fix all the problems that customers had with their computers, because I'd been working on computers most of my life, but nobody ever told me how to actually do the job. Turns out I was supposed to call the customers and tell them what their problems were, get authorization to repair, log all of that in the system, and move computers through the pipeline so we could get paid and keep the shelves from filling up. I didn't do any of that. I just fixed the computer and put it back on the shelf. Nobody told me anything. I was 18 and I didn't know any better.
Eventually I got removed from the schedule (not fired!) after working Black Friday (the day after Thanksgiving in America, where everyone goes shopping for discount TVs and bargain clothes). I don't know what the lesson is here. I'm pretty sure I was just hired in October with the express purpose of working that very profitable single day in November. If that was my only reason for getting hired, then of course the company isn't going to spend any time or energy training me. I moved on to work at another computer store, this time doing sales.
Early days in the office
I've worked a few low-level office jobs, working in the county school system, helping out the IT guys, formatting & imaging laptops, and doing odd jobs for whatever teachers or administrators needed it.
One of my office admin jobs was working for the county school system, doing data entry from paper into the computer. We had a bunch of paper IEPs and they needed to be digitized because, uh, computers are better at doing this sort of reporting. The county was in the process of migrating to a web-based software, but it was a long process, and they still had lots of manual paper-based data to enter.
My task was to do 50 IEP packets a day. I could do them as fast or as slow as I wanted, and I could do more than 50 if I wanted, but that was the entirety of my responsibilities. So I got to work, learned what needed to be entered where, what parts of the packets I could ignore, and quickly developed a contest with myself to see how quickly I could do all 50. It became a game to try to beat my previous record, and I got pretty darn fast at it.
After that, I wanted to see how many packets I could do in a day, so I crunched through as many as I could in my 8 hours. Doing something repetitive like this for an entire day is pretty exhausting, so I didn't really put that much effort into maximizing my throughput.
Eventually I got bored and asked my supervisors if I could do more. I wanted to learn something new, or do something where I felt stimulated and useful[^1]. Actually using my brain is important to me (turns out), and I don't like having a job where I just sit around all day, even if that's an acceptable way to do that job (which is a surprisingly large number of office jobs, unfortunately).[^2]
So then I started working on the new web-based system, mostly as a support rep, answering phone calls from confused and frustrated teachers trying to figure out why they couldn't accomplish whatever they were trying to do. And I really liked doing it! By this point I had learned the system pretty well, so I knew how to handle almost all of the support issues easily. That led me to going to in-person training classes where we taught the teachers how to use the new system.
One of the most important moments of my career happened during one of these training sessions. I was helping a teacher work through some issue on her computer, walking her step by step through the problem and solution. She stopped in the middle of this and said "You know, you're a really good teacher. You should become one. Just go get your master's and work here in the county." This totally threw me for a loop.
I had never given any thought to teaching. Generally I was a lousy student, I hated the structure and oppressive rigidity of public school, I didn't like homework, studying, or having to sit in class for hours a day. Teaching was not even in the realm of possibility for me because I had such a disdain for school life. So when I was told I would be a good teacher it didn't feel right, it was like someone telling me I should move to Antarctica. Still, the seed was planted and it grew slowly over the years. Eventually I did become a teacher, and I think about going back to it all the time.
To this day, teaching is still the most enjoyable and rewarding job I've ever had. If the stars align some day I will be glad to teach again.
Restaurant life
I've only worked in one restaurant, but I loved it. It was hard, and I wasn't all that great at it, but I'm so grateful that I got the chance to do it because I understand how difficult of a job it is to work in the service industry. You have to deal with the public, be quick and accurate all the time, work 14 hours on your feet, and have the entirety of your salary be dependent on the gratuity of other people. For the rest of my life I will tip generously when I go out to eat.
If you've never worked in a restaurant, or in the service industry in general, it's hard to describe how much fun it can be. There's an instant camaraderie that develops between all the employees in a way that absolutely does not exist in a professional office environment. I've had office jobs where I really enjoyed hanging out with my coworkers, but its not the same.
The place I worked was a mid-level italian chain, located in a suburban shopping mall. The food was reasonably good (though now that I'm a snobby elitist New Yorker I wonder how I'd feel about it) and the prices were acceptable. Only on Thursday, Friday and Saturday nights did we actually fill the whole restaurant. Working a lunch shift meant I walked away with $30-50, but working a Saturday night meant I could make $300. My first ever shift I worked a Tuesday lunch and made $17, which had me seriously doubt if this job was going to work out for me, especially because I left my cushy county office job to work here.
Working at the restaurant taught me how to hustle, be comfortable talking to all kinds of people, never say no to customer requests, the art of the upsell ("another glass of wine for you?"), how to subtly and gracefully encourage people to leave so you can turn the table (which makes you more money), and how to really earn your tips. A high-earning day was super satisfying, a low earning day was a total morale killer.
One day I messed up someone's order by entering the wrong entree in the system, and he used it as an excuse to leave me zero tip. I was furious, and felt betrayed. My manager basically said sorry, it happens, what do you want me to do about it? On another night I masterfully served a big party by myself, and they gave me a 25% tip. I talked about that for days. Such are the highs and lows of the service industry.
I got fired from this job because I was late too many times. On the day my final violation occurred I even got there 30 minutes early, but because it was a busy mall at Christmas time it I got stuck in the parking garage for 45 minutes. They did not care. The one thing you can't do at a restaurant is be late for your shift. Most everything else is fair game. Oh well.
Technical writing
My first "real" job was working for a friend's company. We sold software to the federal government. I was officially hired on as a "Technical Writer", though I did all kinds of things, including sales, release management (we used tortoiseCVS) code debugging, and lots of whatever was needed.
This was the job that really led me into a career. Since we worked as a government vendor, one of our contracts stipulated that we all have Top Secret security clearances. The company submitted me for one, I filled out an absurd amount of paperwork (hopefully e-QIP is less annoying than it used to be), had several rounds of interviews, and 11 months later I was a cleared employee.
Where I grew up (in the suburbs of Washington DC), there are tons of government contracting companies. Having a security clearance meant these companies can charge significantly more per hour to the government for your services, so they're much more willing to hire you. The demand is so high there are massive job boards and networking events dedicated to cleared individuals.
Equipped with my fancy security clearance, and with my resume saying I had some experience as a Technical Writer, I got a nice paying (for 23 year old me at the time) job. That job didn't last six months (because that's how the government contracting world is), but I got hired at another, bigger company and stayed there for a few years.
This second job was actually a pretty good gig - full benefits, stable, the most money I had ever made in my life. The team was an eclectic group of people, some of whom had been there for more than 10 years. I liked going to work in a big fancy office with my own cubicle. I felt grown up, like I had made it and I was gonna be okay finally. Since I was the only one doing technical writing, I was given complete autonomy to remake the entire documentation system, which I jumped into right away.
It was incredibly empowering to be given the tools and freedom to do what I thought was best, and I will always remember how excited I was to tackle this big task.
After being there 3 months I had rewritten the entire help base, added some key features and pretty CSS, and completed docs for about a third of the entire surface area of the product. I was proud of the work I did, and I got stellar feedback from my boss and some of the PMs. Creating something from scratch, taking full ownership of it, caring about the details, and not being hampered by process, politics, or technical complexity was an incredible experience in my professional life.
Unfortunately this all started to fade when I realized that there was no actual value to what I was doing. Nobody read the documentation. I got no feedback from users or the customer. We had a handful of users and they didn't really need any training on it, and most of the users had been users for many years, because the government doesn't move very fast.
So I decided to slow down, since my efforts weren't being rewarded. I wanted to see what would happen if I did less. It turns out that nothing happened. So I did even less, and even less, and eventually I just stopped making updates to the documentation at all. This led to a downward spiral of non-productivity that was impossible to get out of. At one point I spent six months doing nothing, just to see if I could get away with it. Nobody cared. After some time of this, my boss had a conversation with me and said he was disappointed - I had done so much good work in the beginning, but now I wasn't doing much. Since I didn't really know what to say, I just kept not doing very much, and nothing changed.
In this company, we had a yearly performance review. Everyone was evaluated in several areas and given a score from 1-5, with 5 being the highest. My performance rating was always a 3 - in fact, everyone on my team got a 3. Everyone in my org got a 3. I argued VERY strongly to be given a 4 in one category (my first year), and I didn't get it. 4's were for top performers they said. 5's were never given to anyone.
At a company that operates this way, there is no incentive to improve. There's no reason to do a good job. I started to see this as a huge problem for myself - all the people who had been at the company for 10 or more years began to reveal a new reality to me. They weren't doing great work, they weren't experts in their domains, they were just stuck there, being rewarded for doing nothing, the same as everyone else. If I stayed at this company, I would fall into the same comfortable trap and be stuck in one place, not using my brain, not learning any transferable skills, not doing anything productive for my career. Once I realized this, I had to find a way out.
I spent almost 3 years at this company, all of my impact was jammed into the first three months there. The rest of the time was purely a waste of taxpayer dollars.
Becoming an Engineer
As problematic and unfulfilling as my technical writing job was, it directly led me to becoming a software engineer.
One day I went to one of the lead engineers, who I was buddies with, and told him how bored I was. I asked him if he could teach me how to code. He agreed immediately, and helped me set up my laptop with a developer environment and gave me a little tutorial and a tiny project, working on some internal website for the team. Other than that I didn't get much help, but I had so much free time that I got to just poke around and figure things out on my own. Occasionally I'd message someone and ask a question, or grab somebody at lunch or on a smoke break, but generally I was just flying solo.
Eventually I did figure some stuff out, and I made a little progress. This process showed me that I could teach myself new things, and that coding wasn't some big scary mountain, it was just a bunch of commands with a few simple rules about syntax. I'd try to change one part of a program and see if it did what I predicted. Figuring out the structure of the code, how data got passed around, what certain things meant and what I could ignore for now - all of these were crucial to my understanding.
All of this led to me learning enough programming to try leaving this company and work somewhere else as an engineer. I had a friend who was working at a media company doing ad tech things, and he referred me to an entry-level role there. After applying and going through the interview process, I somehow managed to convince them I was the best candidate (I'm sure my friend's referral helped too), and I got hired.
I could write a long soliloquy about how you gotta be motivated, work hard, never settle for less, be a hustler, whatever. Maybe some of that is true about me because I don't like to settle, but mostly I just feel lucky that it worked out that way.
Landing a job as an engineer changed me in significant ways, both materially and internally.
Actually writing code
My first job as an engineer was working for a media company in their advertising department. Our team worked on managing all the code that controlled the ad placements and logic across the site. We also built and launched new ad designs. It was honestly a pretty good first job, and I felt so lucky that I basically got paid to write code for a living. Basically, I thought I was being paid to learn new things. The first six months I worked so hard to learn as much as I could because I was terrified of being found out an impostor, or not getting my skills up to par.
Similar to my previous job, I didn't get much help and I had to figure out a lot on my own. Part of me was too afraid to ask for help anyway, because again, I didn't want anyone to know how little I knew. This was not a great way to learn, but it's what I did.
After about 9 months doing ads I got the opportunity to join a new team, working on sponsored content - basically, we acted like a design agency inside of the advertising department. Companies paid us to design and publish content that made their brands look good.
The new role was fun for awhile. I got to work on more visually interesting projects, there was a higher bar for quality, I got exposed to working on the backend (Wordpress), and in general it was chaotic and enjoyable. Generally I had a lot of latitude to do things the way I wanted, but also the deadlines were pretty tight, and I had to hit them. Eventually though, the work became routine - it was just cranking out sites in a short time, and though I got pretty fast at it, I didn't feel like I was learning anything new. I heard about an opportunity to transfer to one of the engineering teams, so I applied, interviewed, and got it.
When I landed on the engineering team I thought I had really made it. Now I was finally a real software engineer! At a big company doing really cool and important work! What could be better than working on an internal app that was used by journalists and freelancers to pitch stories and handle payments?
It was actually pretty great for awhile. I got to learn a whole new stack, work on a proper ticket and release cadence, dive into the biggest codebase I had seen up to that point, work from home 2 days a week, and continue learning and growing. What wasn't cool was that I basically worked in isolation - my teammates were remote on days that I was in office, and when I was in the office they were remote. The people I sat next to were not my coworkers, they were just other company employees, so I didn't interact with them the same way. We all worked on different tickets so I rarely had any opportunity to talk to them. There was one senior engineer named Liz who was great, and she did help me when I asked her, but we only overlapped in-person one day a week.
I didn't even realize it until I decided to quit, but I really need to be a part of a team. The whole stereotype of the programmer sitting in a dark basement by himself, talking to nobody, with questionable hygiene and sleep habits - that's just not me. I have to be in community with others, especially at work.
Ultimately, I left the media job for a startup that is now worth a billion dollars (or hit a billion at one point), but I never got any equity and I left before they got rich and famous. Such is life. I hope the founders are happy and fulfilled and proud of what they have created.
Teaching
It's hard to describe how much I loved teaching.
I loved the physicality and movement that being in a classroom brings, I loved being creative while I had to answer any questions that came at me, writing lessons, explaining concepts in a way that made sense to everyone, motivating struggling students, facilitating groups so that stronger students could help weaker ones, the list goes on. Teaching also taught me technical concepts on a much deeper level - thinking I know something is very different than trying to explain it to someone else. It really challenged me in every way, and I felt like for the first time ever I was firing on all cylinders. Teaching opened up a part of me that I didn't know was there, but now I can't turn off. It forced me to orient myself more towards people, and less towards computers.
I also worked a ton of hours, usually being at the school from 9-7 and then working on the weekends to prep or improve lessons, grade homework, give feedback on projects, think about improvements for next cohort, and all the other things that came up. But I didn't care! I didn't feel tired or burnt out, I felt alive and engaged. Every morning I was fired up to go into work and teach another day. This was huge for me - it showed me that I could work super hard and still love my job, and it wouldn't burn me out[^4].
There were a number of other reasons why I loved teaching so much. I had a great team of motivated people, and we were all young and full of energy and trying really hard to make something happen. It felt like we were all in it together, trying to carve out a path for a new model of what education could look like. There wasn't a lot of organization around process or curriculum, but there also wasn't any red tape, so we just made changes and improved things as much as possible.
Being a teacher is a really hard job, and to do it well you need a lot of support and guidance, especially in the first year. I felt supported, and I think that helped me really grow and excel rather than burn out and quit prematurely.
Management
Engineering management is hard. A lot harder than being a software engineer is, at least in my experience doing both.
It's harder managing people because people aren't predictable like computers. Computers follow rules, people do what they want. People are infinitely more complex than any system. They're hard to describe, sometimes hard to understand, and change constantly. When you put two people together the complexity of the interactions multiplies. Now imagine putting a whole team together. If one person is a relational database, two people are a Cartesian join from every table to every other table.
Even with all that complexity and difficulty, I find being a manager significantly more interesting than being a programmer. People are fascinating. Organizing, motivating, and growing people is far more appealing to me than writing code. Sort of like engineering, there's often no "right" way to do something - everything has a trade off, and you don't see the results of your decisions until months or years later.
I became a manager at my previous company after being a senior engineer, and I tried my best to get good at it. At that point in my career I felt like I no longer wanted to be a software engineer, but since I was such a fan of teaching I thought being a manager would be a good way to stay working in tech, and turn my focus towards people rather than code. So I dove in as best I could - I bought and read some books (turn the ship around, an elegant puzzle, the manager's path), I asked for help, and I did what I thought I was supposed to do.
For awhile things were good. The company was growing, I built a trusting relationship with my team, morale was solid, and I thought I was doing a decent job. We hired a new VP of Engineering and VP of Product, and I was hopeful that I could learn something from them, because they were experienced and knew how to do this.
The parts of management I really enjoyed were having 1-1s with my team, thinking about their career development, brainstorming with the PM and designer on new features, running retrospective meetings while listening to my team's highs and lows, and having hard conversations about performance and priorities. I did not enjoy things like sprint planning, writing performance reviews (mostly because they're HARD to do well, and I really had to dig to come up with honest, constructive feedback), or trying to justify why we should tackle technical debt over some new feature. It was a mixed bag for me, and there's plenty of stuff I could get better at.
After about a year as a manager things started to unravel at the company. We had several re-orgs in a row, which made some engineers sour. The CEOs weren't very clear in explaining their vision, and it felt like I didn't know how to tell people what we were doing, even though my team was responsible for the core product. We created some new teams, hired a bunch of engineers, but had a hard time actually making progress towards anything substantive. For the size of company we were (150 people, less than 50 engineers), it felt like we had entirely too much distributed decision making, and the team structure did not match the product structure or data model that we had, so getting things done took significant cross-team effort. I was trying to stay on top of it all, but we were just doing too many things at once, and I spent 6 or 7 hours a day in meetings, which left me no time to actually think or figure out what I needed to do. The priorities kept changing, and even when we were given top-down guidance, it was very unclear how that mapped to our existing work plans. When I asked for guidance, I didn't really get any, and other managers that I met with felt similarly.
I started to burn out, though I didn't realize it at the time. Whenever I got a break from meetings I would lay on the floor and pet my dog, instead of catching up on messages. I started to be unable to focus in meetings for more than a few minutes at a time. I had no desire to look at any type of screen after 5pm, which honestly is still kind of true, even 7 months later. My wife got pregnant and I started daydreaming about quitting once I went on paternity leave.
All of these things were clear signs of burnout. At some point the VP even asked a few of us how we felt, and I said as much, but that didn't change anything - there was already too much momentum in the wrong direction.
Ultimately, I got let go 2 months before our kid was born. It was a huge disappointment and relief all at the same time. They gave me a nice severance and health insurance for awhile so I got to decompress, go visit a friend, and help my wife in her final weeks of pregnancy.
I hope to continue to work as a manager. I really enjoyed so many parts of it, and I think finding the right company to grow at will give me a very different experience than before.
Lessons? or something like that
- Becoming an engineer taught me i'm capable of learning hard things.
- I always knew I was smart, but I was never a motivated student. Learning to code helped change my mindset about growth and education.
- It also taught me how I like to learn - not from videos or textbooks, but from trying and experimenting and asking others for help when I'm stuck.
- Having autonomy in a job is amazing. It's essential to growing and finding fulfillment at work[^5].
- I want to work on a team where I get to interact and collaborate with other people. Working in isolation might be great for some people (like authors or artists maybe) but in my day job, I need to work closely with people.
- I value nontraditional life & career paths, maybe because of my own non-traditional background, but also because I believe in combinatorial creativity.
- I like being a generalist[^3], specialization is for insects
- Even boring repetitive jobs can be made interesting if you try to gamify them. This could be reframed as "challenging yourself", or being creative within constraints, or trying to make the best out of a shitty situation, or lots of other nice ideas.
- Working with people is far more interesting and dynamic than working with computers. I don't know if it's easier or harder (there are some really hard computer problems out there), but it's more rewarding for me.
- There have been a few seeds that were planted and took years to fully develop for me:
- Becoming a teacher. That teacher I worked with at the county who told me I'd be good at teaching. We only interacted for a few minutes, but she made a significant impact on my life without even knowing it.
- Becoming a manager. I was inspired by rands writing in one of his articles - he said essentially "if you are an engineer, and you're interested in people, you owe it to yourself to become a manager". For some reason that really hit me, even years before I seriously considered it.
- I don't have a clear path of what's going to happen next, but truthfully I never have, and it's always worked out. I just have to trust the process.
- It took me a long time to realize this, but there's a big difference between jobs where you're hired to perform a task, and jobs where you're hired to solve problems. Being a software engineer or manager is firmly in number 2, and once I crossed over that line, I couldn't go back. At the time I worked for the county school system, I didn't know the difference, but I had a vague sense that there was much more for me to do.
- There are a lot of jobs where the most basic technological skills could automate or reduce 90% of the toil of that role, but many businesses and governments don't have the culture or willingness to operate any differently. If you're a software engineer, these solutions are fairly trivial to implement, and in a lot of cases you don't even have to write any code, just connect a couple of systems together with some no-code tools. To a non-technical person, they are incomprehensible incantations of arcane magic, but to someone who likes to solve problems, they are the bread and butter of software engineering.
- Generalists often do better than specialists in many areas, but especially when looking at top-performing athletes or musicians. Generalists also often find more fulfillment in their work. See Range by David Epstein, this book is great.
- I've felt more exhausted working much easier jobs because I was so disengaged from the work it felt like torture just being there, staring at the clock, waiting until I could leave. If the work is aligned with what I want, I find that it's energizing more than draining. It still takes effort, and I still get tired at the end of the day, but it's a completely different experience.
- Daniel Pink writes that we need 3 main things for motivation - autonomy, mastery, and purpose.