Interesting article. I have thought a lot about this frustration on the job.
However, I’m on the opposite side of the fence.
In summary, there are two fundamental ideas in software engineering that people constantly grapple with especially new grads:
1) If it works, it’s not broken.
Or
2) It’s broken until it’s not.
( also can be seen as “right” vs. “right now” )
Let me explain further;
- first point refers to the idea that if the constraints provided are achieved, there are no tasks to be done.
- second point refers to the idea that there is a correct way to do something.
I’m not going to take long, but i strongly stand in the first camp. There is no value in building kingdoms in details that aren’t required. Could we have it run in 010ms vs 250ms? Could we make this look better? Could we do this in a different way? Etc. none of this matters if it works.
Now; you might ask the following questions:
- what about scalability? What if I’ve done this before and I know pitfalls of xyz?
And my answer is, politely, iterative improvements after a working model if those improvements become necessary. Those improvements are not defacto necessary. And when I say necessary, I mean customers are returning the product, not an engineer can’t sleep at night because of his/her neurosis.
In summary, the world you live in was at-best designed with an acceptable tolerance for error. I call that, “good enough”. There is no other measure than “good enough” when it comes to acceptance criteria of anything.
It benefits nobody to be a 10x engineer unless they are making 10x salary. In fact, once you have the job, the absolute best play is to do as little as possible and not get fired. We are businesses ourselves, don’t forget that. You work for money, and once you have the money, there is no reason to ever give more value than you are getting.
Want more money? Study for an interview and then return to your minimal effort process. Believing that you need to give more is the company winning. Treat yourself like a shrewd startup business.
This is very subjective. ( obviously ) You can go 10x speed in a direction that is pointless. Not all work equates to value. The best product is the simplest that makes the most money. Duct tape and hacks make money. There is zero value in going beyond that. Over-engineering is an epidemic. “cool” means nothing. Engineering is a tool for a job, it’s not a product in itself. If your internal parser fails when you see a comment in code with bad grammar and you strive to fix it, that is you being neurotic not useful. Engineers love to build kingdoms in the details that nobody gives a fuck about.
YouTube. Khan academy. There are so many people trying to make a buck with a whiteboard online. Find one that you like ( gender, nationality, accent, whatever works for you ) and then stick to it
I am too authentic to work at FAANG. My salary as staff eng. is roughly equivalent but I can argue, throw a fit, change direciton, say my opinion etc etc every day. I push through friction, I ignore managers, I do things my way. I ask for forgiveness not permission because I have a bias for action not confirmation.
Software engineering interviews do not value authenticity, typically. They want you to say what they want to hear. I purposely go in the opposite direction. I am always myself, say how I feel, and challenge the interviewer.
My girlfriend ( soon to be wife ) has no issues getting any job she wants in software engineering. She will recite exactly the words they want to hear, and they love her. I will say exactly what I want to say in an interview and they will love or hate me. I have no intention of changing.
My best advice? Leave for a smaller company that lets you do whatever you want to do and perform at an exceptional level. You get the same satisfaction, same pay, and you may only be 1 step down from VP. You can grab VP's, C's for a comment, you can do whatever you want ( as long as you perform ).
Unless there is a business requirement for something to be 10x faster, and that is rooted in $’s, there is no reason to be more than 1x.
Performance criteria should only be measured by whether or not you lose money/customers from it.
It’s not an EM’s job to have performance criteria themselves. That should be dictated by business needs