| 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. |
I don't find it acceptable to merge something that I know could be 10X faster with a bit more work. Part of my acceptance criteria is "has reasonable performance".
Performance optimization is contentious because everyone has to draw the line somewhere. You can sink an almost unlimited amount of time making a complex program faster. But I've seen so many devs just ignore it altogether, where half a day of work literally makes the thing they made 10x faster.