Tomorrow will mark 3 months as a full time engineer and as if on cue, I had a the most perfectly awful but wonderful day. A frustrating but deeply satisfying day where I struggled, celebrated, cursed, ordered pizza, high-fived and wrapped up before the hours became single digits again.
I say this was on cue because of everything I’ve learned in the last 3 months, how to deal with pressure has been the most vital. So in preparation for my 3 month check-in, I thought I’d reflect on some of the epiphany’s i’ve had along the way.
So here goes:
1. Make a list of everything you learn every day
I began doing this in a way, first by starting this blog, then later by writing super detailed training docs for myself, and most recently, a list of every new piece of information I pick up. The biggest mind-fuck I struggled with was feeling buried in the learning zone and not able to produce output. I discovered pretty early that “learning” on the job, while a great investment in your future, feels absolutely worthless at the end of the day if you have nothing to ship. Hence the list. The list also started serving as a useful data source. I started keeping track of what source files or websites were associated with something, so I could grab an example of it more quickly. Because as satisfying as it is to close tab after tab of stackoverflow threads when you figure something out, nothing is as sad as realizing it actually didn’t work and trying to find that “one” thread that had the answer. But at the end of the day, it just helped me sleep better on nights where I went to bed without shipping anything. I’m big into cold hard data. And looking over an extensive list of programming concepts I’d conquered, helped me see learning as progress.
2. Commit early, commit often. Not for just for git posterity, for your sanity
At the end of every week, I send my boss an email describing my progress, plans for next week and fires. It’s a bit corporate, but it’s good to document your work, lets you control your perception a little easier and managers tend to like it. About 2 1/2 months into my engineering gig, my boss asked me to include links to my PRs with the emails. I took it a step further and started committing small milestones, even if it wasn’t ready to ship, and tagging the commits to the emails. One of the worst things I struggled with was anxiety around having nothing to send my boss at the end of the week. Once my manager suggested I include PRs, I realized I could use leverage github as a record keeper and was able to relax… somewhat.
3. Break up your time into similar tasks
Probably the toughest thing about engineering is the never-ending amount of things to learn. Learning a language, building an app and conquering some coding questions is such a tiny part of programming. And it takes a really, really, really long time to find overlap in any of it. Which means it takes that much longer to feel like you’re making any progress. which makes it that much easier to want to give up. One thing that helped me was breaking up the week into common tasks so I didn’t have to deal with as much context-shifting. I spent most of the Monday through Wednesday working on my projects.Then in the evenings, I would pick something I didn’t feel solid on but had managed to get working and dig deep. I also dedicated time to general topics. Mondays was algorithms, Tuesdays was rails apps, Wednesdays was linux and git flows. Thursdays, I scheduled meetings with people to help me with stuff I was struggling with (side benefit was getting to temporarily put down something frustrating without feeling guilty). Thursday afternoons I would try and review other people’s code and stalk the slack channels to learn what was going on in the rest of the company. Fridays after the deploy lock, I’d pick a couple things from my “list of shit i heard someone say and don’t know what it is” and read up. As valuable as context-shifting is for an engineer, it’s terrible when you’re trying to learn. So I forced it.
4. Commit to the long hours
This seems obvious so allow me to explain why I’m including it. So, learning this shit is absolutely brutal. I pride myself on being extremely strong when it comes to learning new things. Moving around every 2 years growing up has left me with virtually no comfort zone. And I was still surprised at how brutal this is. The brutality was exhausting. And after 8 hours of laser-focused thinking, interrupted only by fits of rage, I would leave the office, come home, look at my computer and the anxiety would overwhelm me. And I would feel sorry for myself and decide I’d had enough torture for one day.
But I’d go into work the next day feeling behind, feeling even more pressure to get through things and much less able to handle setbacks. And I started making excuses. That everyone else had so much more experience, they never had it this hard. They got to learn in school, where you’re supposed expected to struggle.
Then one night, I was feeling so sorry for myself that I decided I was going to stay at the office until I finished something I was stuck on. I assumed it would take me all night. It did. But as I was walking home around midnight I realized it was the best I’d felt in months. There was pride in surrendering to the torture and coming out the other side. There was something relaxing about letting myself “take all night” on something. My self-proclaimed “success secret” is to make up for whatever you lack by working harder than everyone else. But somewhere amid the stress and identity crisis of not feeling smart for the first time in my life, my ego got the best of me. So, the lesson really, is to lower your standards for how you think you should be doing and just own your own pace, no matter how excruciatingly slow it may be. And if that means 15 hour days for a long, long time, then cancel your gym membership, stock up on redbull and get your fucking head down.
5. Learn early when to ask for the help and when to put time in the hurt locker
There’s two ways to get something done when you’re new; you can ask for help and or you can figure it out yourself. In engineering, the latter path can add days to a project. But you can’t always rely on the former and there’s an art to knowing which which to choose when. One thing to do early is setting yourself up with a good network. Get some people to commit to helping you ahead of time. Make friends in the beginning and take some time to figure out who the strong people are. Then play around with a mix of suffering through 6 hours of googling and bugging your coworkers for answers until you find the balance. And then let me know if you ever figure out that balance cuz I’m still lost af ; )
6. Don’t neglect your sanity
One thing I noticed immediately after my first week on the job was that how differently i felt after work. I was *exhausted.* And not just a usual “work tired.” It took me longer than usual to shift from work to play mode. I struggled with small talk. I also started forgetting to eat. I would get buried in an intense problem and be so enraptured that it was suddenly 9pm and I hadn’t left my desk. Because of the nature of my projects, I had far fewer meetings than I did in my previous life and often would go an entire day at work not talking to another human being. it did weird things to my head. so i started doing crossword puzzles. like a lot of them. in 3 months i did the last 2 years of the New York Times. it helped me go from intense hard problems, to lighter problems, as a buffer before things go into social mode. I also make it a point twice a week to walk around the office and be social and get no work done and take care of my head. because it’s important.
So that’s my 90 day reflection. i know there’s a lot more to figure out but in keeping with the theme of this entry, i’m going to have a glass of wine (okay, continue drinking the glass of wine i poured when i started writing…okay i’m actually on my second glass). I’m gonna be proud of what i’ve learned, send it to a few friends so i can feel some connection and go watch nature documentaries.
Oh right, the Yak. Yak shaving is a term I learned a few weeks ago that describes the seemingly useless dependencies that derail you from the task at hand. Best described here:
I’ve made peace with the Yak.. or maybe just temporarily destroyed him in battle… either way, to be continued…
3 thoughts on “Making Peace with the Yak: How I learned to keep my sanity in the house of pain”
Journaling, list-writing or just general reflection is SO often overlooked, but an excellent motivator 🙂 I like having a todo list and associating my git commits with checking an item off that list. It’s a nice little dopamine hit from each checked-off item, and of course creates that accountability log you were talking about!
This is a really great post. I also need to keep track of my progress with a list/journal. It helps so much when there are days when you feel as if you know nothing. Sometimes that feeling can just suck the motivation from you, but being able to look at all that you have learned makes it somehow less overwhelming to think about the long road ahead, knowing you will get there.
I have a question about the long, long days. I’m currently teaching myself how to code, and the long, long days thing is the one thing that always makes me hesitate. I’m a bit older than most people getting into this (30), and with health issues, I CAN’T do 15 hour days. I need to cook healthy meals. I need to exercise at least an hour a day. I need to sleep at least 7 hours. I need to have at least an hour of downtime a day to not be on the damn computer or working on a problem. I need to take care of my family. I have a 2 hour commute, sometimes longer. I want to become a good developer (I’m giving myself 18-24 months to learn), but it’s not a choice; I just simply cannot allow it to become my life and put my health on the back burner. Do you think this is going to be a problem?
Hey Dany, I’m glad the list/journal thing has helped you. I’ve actually started using mind mapping software to get even more out of it. To your question about the time commitment, work/life balance is crucial and I didn’t mean to suggest that learning programming would absolutely mean sacrificing your health. It really boils down to your particular situation. A lot of people quit their jobs and learn programming full time. For me, that wasn’t an option, so it just meant I learned more slowly. The best thing you can do if you’re concerned about not being able to meet your goals in a limited amount of time, is get yourself a tutor. The human explanation and personalized help will save you a LOT of time trying to figure things out for yourself. That being said, being able to figure things out on your own is a critical part of engineering so it’s important to develop that skill as well, but I think it’s completely doable to have a life and learn this stuff at the same time.
Best of luck Dany!