Tell the engineers

Engineers are problem solvers. We are paid to analyze a situation and come up with the best possible solution to achieve the desired outcome. When management hands down a directive without context or justification, it’s toxic. At best, it prevents us from doing our job of understanding and executing. At worst, it causes us to wonder if the decision makers are competent. It erodes our confidence in the future of the company.

Side Slack conversations proliferate.

Why are we being asked to do this? It’s not even possible without totally rebuilding X.

It’s a horrible decision. They have no idea what they are doing.

It’s going to blow up in the company’s face in ten different ways. Management must be completely stupid.

One day we were told that QA and application engineers were going to merge to a single role. Suddenly, senior QA people were expected to be senior java developers, responsible for implementing features and writing clear, scalable code. Senior java developers were now expected to perform QA duties, from UI scripting to black box testing to fuzzing. Two different jobs were smashed together and it was chaotic. Our product defects went up immediately and it took over a year to correct. Turns out the reason for the change was some exec heard that writing tests for your application code was important.

Another time the company decided they were spending too much on the third-party logging solution they were using. It was well-loved by developers and was considered best-in-class. Instead they figured they’d save money by spinning up a team to host a “comparable” open source solution. It was a shit show. Log ingestion was often delayed by an hour or more, which made it useless.

The thing is, most likely management labored over this decision and it was the best one they could come up with given the constraints. Do they explain this to the engineers? Nope. They throw the decision over the wall in the form of a “shut up and do this” order. Guess what that does for morale? Fucks it. What they should do is provide the relevant context behind the decision to the engineers. Explain how the decision came to be. See if the engineers come up with any other solutions that might solve the problem in a better way. After all, in a small boat, everyone needs to pull on the oars in the same direction. If the person at the head of the boat is telling one side to push the oars and the other side to pull, the rowers might wonder what the point of rowing in circles is… when really the task is to turn the boat to the left.

Bad User Experience

I worked for a post series A startup a while back. We’d just been acquired by a big public company and my team was being leaned on to build out a new front end for our ad-serving platform. Throughout the project, we had a project manager (PM) who was brutal to work with. Her daily routine consisted of walking around the office and “checking in” with everyone. For me and the other people in the dev pit, it was a constant barrage of “Hey, just checking in! How’s that user sign-up flow going?” or “What’s up guys?!? When can I checkout those new dashboards?” or “We need to go speed mode on campaign builder — I promised it’d be done by next sprint.”

We all rolled our eyes, but eventually we learned she was just looking for lip service and played along.

Our new parent company was trying to force our ad server to scale in a way that it wasn’t designed for. As the classic software story goes, engineers were pulled in to “fix” the scaling problems, only to get hastily replaced when they couldn’t make the progress that our hilariously uninformed management expected. The consequence of this was poor ad performance and system stability, which mean customers cancelling their ad subscriptions in droves.

Cue our PM. She walked around the corner and stood in front of our team lead, who was staring at his screen trying to ignore her. “Hey, quick ask! Can you remove the cancel button from a user’s ad dashboard and replace it with a link to our contact page?”

He didn’t even make eye contact with her. “Nope.” He stood up and walked away while she watched him in disbelief.

She looked over at me. “I thought he he was supposed to do what I say.” She seemed thoroughly confused.

“Guess not?” I shrugged. She left.

We had a good laugh about it at lunch later that day. She stopped checking in so much after that and never repeated her ask to remove the cancel button.

UX is sacred.

The big company trap

I’ve been working at one of the “You’ve heard of them” tech companies for a while now. Let’s call it BigTech. The compensation is fantastic. I make way more money than I deserve to. The work/life balance is amazing. I’m encouraged to take paid time off whenever I want. The company is known for being a responsible corporate citizen. I’m as close to being proud of my employer as I’ve ever been.

Yet… I’m more unhappy at this job than any job I can remember. The actual work I do is horrific. Not much actual engineering. Mostly slack conversations and meetings. Sometimes I write a throwaway technical document that may get read by a person or two. Our technology is a mess. Engineers with identical titles can be brilliant or totally incompetent. Politics rules everything–you get marching orders and then the rug gets pulled without explanation… “We’re doing this other thing now.”

I mentioned the great pay and benefits. That’s the trap. You get complacent and comfortable. You depend on the big paychecks and the ability to take Fridays off without worry. Maybe you have a family to support. At some point, you realize you have become a BigTech “engineer”. You have succumbed to mediocrity–constant slack venting, endless process, and unpayable technical debt. You have unconsciously accepted that writing code is a treat and not part of your job anymore. You haven’t learned anything new in years. You are so burned out you feel as if your brain is on strike. You watch the company stock price and your 401K.

I’m certainly a worse engineer than I was before I started working here. Don’t be me.

Grow or Go

I was working at a 50 person startup. One of the old guard, Tom, was my team lead. He was grumpy all the time. His pull-request comments were passive aggressive and pouty. His mentorship was non-existent. He’d abruptly answer questions, but was clearly more interested in his own stuff. He was a bit toxic to work with.

My coworkers and I were confused. We’d been told by management and other senior devs that Tom was great. He was a founding engineer at the company, fun to grab a drink with, lots of potential. During my time there, Tom only got more sullen and difficult. Something had to give.

Tom was a jack-of-all trades developer–a seed startup’s dream. He’d helped architect the company’s MVP, had written the first version of the mobile app, and had committed most of the code for the various backend systems that made things work. But as the company grew, new engineers were hired that were specialists in each area. Tom needed to let go and pick an area of the company to grow into, but couldn’t. To him, each new senior dev was an interloper, someone who was taking away one of his creations. Tom was unhappy with the way things were going and he made it known.

Management was blindly loyal to Tom. He was one of their first engineers, so they ignored the issue. They gave him many chances to improve his attitude. They explained away his bad behavior. Things got worse. Tom’s toxicity caused several people to leave the company after less than six months. Tom eventually quit soon after that.

I’ve worked at a few companies that had this problem. All of them either failed or remained stagnant, never growing beyond the technical reach of their do-everything engineers. The fix is for the founders to do what’s best for the company. Tom needs to grow or go.