Sometimes, what is necessary to solve a group of problems is fairly simple. Routine even. But if the developers do the routine thing, it will be boring. Very boring. So, in many cases, they decide to do something clever or over-the-top to avoid being bored.
Clever is usually small. A crazy idiom or a neat syntax trick. When wrapped nicely it is mostly okay, but if done recklessly, everywhere, it kills the readability. Good job insurance for the clever person, but wantonly destructive for everyone else.
Over-engineering is at the middle level or higher. Such as using an advanced paradigm that doesn’t provide any benefits, or putting in excessive industrial strength that is not necessary. Another example is modeling systems for impossible possibilities. All of these will significantly bump up the complexity, making it all far harder to wrangle. Sure it isn’t a bug fest, but it is usually too stiff, too slow, and too inflexible.
Another variation is dependency madness. The desire to throw in as many partially used small libraries as possible, primarily for the sake of learning and getting experience with all of them. They aren’t needed and they choke up the effort, making it harder in the future because they decay quickly.
Silos and fragmentation should be included here too. It’s boring to read and try to understand someone else’s code. So avoiding that by rewriting it, is really just going back to the start again. Silos come from hiding your stuff away from other core stuff, with onion architecture being a common variation. Fragmentation is just throwing code and data anywhere without caring.
The last variation is Rubik’s cube addiction. Solving lots of little problems as fast as possible and then just tossing them over your shoulder into a growing pile. The act of organizing these little bits may be tedious, but a big pile of stuff is pretty useless.
All of these bad habits are about staving off boredom. They are all negative, they always hurt the work, contribute to tech debt, and only get worse with time.
What would be better if you are bored is to build things that are sophisticated, not just complex. E.g. solve more of the user's issues, in better ways, with simpler interfaces. That’s not boring either and it's far more positive.
Clever is usually small. A crazy idiom or a neat syntax trick. When wrapped nicely it is mostly okay, but if done recklessly, everywhere, it kills the readability. Good job insurance for the clever person, but wantonly destructive for everyone else.
Over-engineering is at the middle level or higher. Such as using an advanced paradigm that doesn’t provide any benefits, or putting in excessive industrial strength that is not necessary. Another example is modeling systems for impossible possibilities. All of these will significantly bump up the complexity, making it all far harder to wrangle. Sure it isn’t a bug fest, but it is usually too stiff, too slow, and too inflexible.
Another variation is dependency madness. The desire to throw in as many partially used small libraries as possible, primarily for the sake of learning and getting experience with all of them. They aren’t needed and they choke up the effort, making it harder in the future because they decay quickly.
Silos and fragmentation should be included here too. It’s boring to read and try to understand someone else’s code. So avoiding that by rewriting it, is really just going back to the start again. Silos come from hiding your stuff away from other core stuff, with onion architecture being a common variation. Fragmentation is just throwing code and data anywhere without caring.
The last variation is Rubik’s cube addiction. Solving lots of little problems as fast as possible and then just tossing them over your shoulder into a growing pile. The act of organizing these little bits may be tedious, but a big pile of stuff is pretty useless.
All of these bad habits are about staving off boredom. They are all negative, they always hurt the work, contribute to tech debt, and only get worse with time.
What would be better if you are bored is to build things that are sophisticated, not just complex. E.g. solve more of the user's issues, in better ways, with simpler interfaces. That’s not boring either and it's far more positive.
No comments:
Post a Comment
Thanks for the Feedback!