I am quite a perfectionist and I like elegant and lean solutions. The problem is that I notice that this is not what is valued in my company...
I've been working as a software-developer in mid-sized to large customer-projects (banking, insurance, government..) for about 5 years now. This is my first job as dev. I studied computer-science (with focus on theoretical computer-science). Since I started working I noticed, that those who learned with a more practical approach and focus on engineering are quite a lot faster in finding solutions, although I usually find their solutions to be cluttered (and everything that comes with that - hard to understand, not to the point, unelegant, etc.). I am a big fan of Unix-philosophy and feel like I have internalized software development principiles and value them a lot: DRY, KISS, do-one-thing-only, naming is important, etc...
As such, I can spend a lot (probably too much) time on a small task, and I am only happy, when I feel it is clear, reusable elegant simple... OTOH I have a big aversion to uneasy solutions and bad design. We work with old code that grew over time with different people working on it.
But I notice, that this leads to the effect that you end up writing code that looks really simple (even if it actually was really hard to get it that simple!). And then someone who reads it feels like “that took you so long?”.
I notice how I struggle keeping a lot of state and things in my head and still being precise and I am impressed how colleagues write code, that is so hard for me to understand (and once I do understand I feel like “ah, what you actually wanted to achieve is xyz - probably there was a more elegant way) and they even get it to work.
Furthermore I notice that I usually take more time than what is the estimate. When discussing with collegues, it always seems like I am not “pragmatic” enough - “don’t write perfect code, write code that is good enough. It just should solve the problem”. I notice how technical debt doesn’t matter too much, because you can compensate that with ‘customer-convincing’, which is way cheaper (and in many cases even more profitable! Like saying, “well it is complicated, it will take 5 days”, rather than saying “well, you had changing requirements, some design choices in the beginning might not have been the best, we actually should rewrite a whole lot, it will take 10 days, but on the long run you should have less bugs and new CRs should be easier to implement.”
The problem is, that with all basic metrics, it ends up looking as if I was really slow (which is actually true in the end I guess): time spent on a ticket compared to estimate, locs, numbers of tickets solved, etc...
All this makes me feel really bad. And I actually would like to be more ‘pragmatically’ skilled. Better suited for all these “agile” philosophies: getting things done, only improve when necessary, etc..
I also feel like I am slow at understanding code and seeing those “pragmatic” solutions that just get the task done, without the need of a huge refactor. I am well aware, that the code I produce in many cases is of better quality, but since the customer is concerned with what features get into the next sprint and long-term expensive quality improvements are not so easy to grasp and measure, the stuff I produce simply isn’t a good fit for the customers need. This makes me feel bad, because I am the uneasy guy who critiques the most (stupid build, shitty infra, bad code, bad design,..) but actually gets done the least...
I am convinced that writing and reading code are opposite forces: code that is easier to write, is harder to read ("basically you just copy-paste, single letter-variable names, because hey I know what it means, one huge method that does what I need", etc.) - OTOH if someone puts effort in writing ("how can I boil out the essence, let's rename this, let's factor out that", etc.)
I’ve thought about trying a product based company, with the hope, that in that environment they hate “unelegant” design as much,as I do... but I talked to a guy in a product company and he said it is more important for them to get things done rather than having perfectly clean code... so I am feeling more and more that I am just in the wrong industry...I actually almost decided that I am leaving the company (the industry?) in about 3 month.
The question is: what should I do? Where should I apply? how can I improve my way of working? Should I look for another kind of company?
Note that over time I've actually have become more pragmatic, but I tend to feel unhappy with those solutions and I also feel that I am not as good at it as others... There are a few people which I think feel something similar as I do in the company - but the vast majority doesn't.