I am a software engineering newbie. I thought that I knew a lot about it after I coded my first BASIC program on a TRS-100 way back in the before time, but now I see that the creation of software is a vast landscape of unexplored country and I have tender feet.

Here are my top five opportunities for growth in software engineering:

1. Over caffeinated coworkers

Engineering groups aren't known for health. Be it a selection bias towards sickly kids or an environmental poison, there are a lot of engineers who ignore their meat-selves and use coffee to dial in their attitude. When PARC was pushed out of the nest by Xerox and cost cutting measures started to pare away the luxuries which had accumulated over three decades, they left the coffee service alone. When I asked the Computer Science Lab director, Richard Bruce, why they didn't cut the coffee he said "I don't mess with people's drugs."

Growth opportunity: I can pay attention to where my coworkers are in their drug cycle and craft my messages appropriately. Right after a hit they can hear expansive and forward looking statements. When they're running on empty it's time to break out the hugs and the kudos.

2. Bug reports

If you look in any bug report database, at least 80% of the bugs will be completely useless for the purposes of finding and then fixing a bug. By the time someone using my software has had a problem, found out how to report it, and then jumped through all of the hoops, they've lost the will to write a single sentence. I reduce those hoops to the bare minimum but I've yet to use a reporting system in which people would write a coherent chunk of text.

Growth opportunity: I can practice relaxing into the moment and staying human while sending the "Thank you so much for reporting this bug! Could you tell me X Y and Z?" emails.

3. Metrics

In one of my coding gigs I had six systems tracking my work: The code repository generated statistics about my work. The shared to-do list app charted and graphed my work. I wrote weekly OKRs which my managers read to track my work. The daily standups notes tracked my work. The customer support system tracked my customer facing work. After all of that automated tracking, I also had two levels of managers stop by my desk every couple of days to review my work.

Growth opportunity: I can empathise with managers' desire to avoid surprises and I can sympathise with the team's resulting lack of agency and motivation.

4. Gnarly problems

If a project is challenging then I run into unexpected problems once a week. Just as no plan survives contact with the enemy, no design survives contact with a compiler.

Growth opportunity: To prepare, I can read widely so that I'm pulling from a diverse tool chest. To react, I can use both my waking and my background mind to work through the gnarls. I can treat each as an opportunity to explore a new solution space.

5. Smooth exits

There comes a time in every project when it's time to leave: I've done what I came to do, the remaining work can be better handled by someone else, the project's in a good state to hand off. Whether the project flamed out or rocketed to success, there's a moment when it is retooled for maintenance and it's time to go.

Growth opportunity: I can unclench and acknowledge that I rarely know in the moment whether a change is good or bad. Whether I've chosen the change or it has chosen me, I can let go of the project's many plans and responsibilities and open up to what's waiting on the far side. Also, I can take a vacation already.

Mark Twain wrote, "I was seldom able to see an opportunity until it had ceased to be one," but I think it's the other way around. Being a newbie makes all of software engineering an opportunity so I'm glad that I was wrong when I thought I knew it all.