Imagine you are starting your career as a developer or any other craft which expects some sort of built-in creativity from you. Even though you’re not an artsy person, you still have to be creative in actually choosing the right a solution to deliver value.

How to choose without experience? Even if you know almost nothing — compared to a seasoned veteran — the world is yours with all the overflowing enthusiasm and energy oozing out of every inch of your body. Turns out, your lack of a long career can be your best asset. You haven’t lost a special gift. You can still relate.
Cut to some decades later and you’ve seen it all. Different types of clients, projects, issues and their unique solutions. I’m hopeful you know ways to solve almost anything the world throws at you. Nothing is that hard if you just practice it long enough or you’ve got used to the suck and embrace struggle as a part of the game.
I made this to show the world how great I am
A seasoned veteran
Yet … somehow you’ve lost a sense of ease.
In the back of your mind there is this looming danger developing as time goes on. You are a professional and want to show the world how your dedication, skills and your solutions are miles away from the greenhorn that just started last week. Only you can devise the your perfect solution. You start to work for your ego.
Welcome to overengineering
What actually is overengineering? I’m loosely quoting the internet here:
You deliver a service or product to a “client” that is more complex or even in higher quality than the client wants or needs.
Wait a moment … we’re here to service our clients with the best we have to offer. Sure, but there have to be limits in place. If someone expects and pays for a Fiat Punto, you won’t deliver him a Porsche for the same price. [Check: Random car comparison]
Otherwise you’re bound to burn the candle from both ends, get used, run over and lastly go out of business.
In the same vein, if you’re expected to build a simple tool, it probably shouldn’t have that many extra fancy features.
Uncalled for additions could potentially even harm the core purpose your tool was created for in the first place.
At the end of the day a shovel just needs to be good at shoveling.
The roots of overengineering could just be in complexity, an ego stroking quest towards perfectionism or a lack of understanding what the client really needs.
Complexity
There is this notion and danger of rising complexity in every project. Yet, the simplest solution is probably the best in the long term. Still, complexity is a brutal beast to tackle. As projects move through their natural development cycles and more features pile on, everything get’s more complex. What’s bound to happen … does happen. Stuff breaks in unexpected ways and even you struggle to conceive how everything fits together to create a working product.
“Simple” is good, but a moving target that’s hard to hit . What’s easy for an experienced developer is probably hard for a new one, starting his career. Still, therein lies a solution you could aim for at least in principle. Building for the future. A future where someone else takes your role and you’re no longer there to explain how to work, optimize or fix it quickly.
Someday someone has to work with what you’ve left behind and while Will Smith eating spaghetti is actually fun, spaghetti code is not, but neither is modularity the all solving messiah. DRY (Don’t Repeat Yourself) is good in practice, but trying to understand how your function is dependable on 9 other functions randomly distributed in 6 classes over 3 files to create a simple output is not. Enjoy explaining to a trainee how everything works together without jumping all over the place and opening up 20 different topics. Hard to follow, hard to get started, easy to get demotivated and even easier to get trapped in the same “proof the world” loop if they dare to follow your example.
Most times simple stuff is the best work you can create.

Perfectionism
I’ve already mentioned perfectionism briefly on the benefit of side projects. It’s good to strive for perfection. Honing your craft and working on your skills to achieve greatness is a honorable and fulfilling practice to do. Be the best you can. However not everything has to be perfect. What even is perfect? Isn’t it unobtainable in all but the current moment, frozen in time?
Stroking your ego in delivering only exceptional solutions that are bound to catapult your career into the stratosphere could even severely hamper your progress. Nobody knows what you’re doing. No one understands it and you’ve made yourself irreplaceable. Which sounds good, but actually isn’t. If no one can take your place, there’s no way forward for you and you’re essentially stuck.
Take the opposite. You create what everyone can use, work on, iterate upon and create results with. That’s true magic.
Not everyone on the team is at the same level. Wouldn’t it be great if even the rookie could start some productive work with your tools? Possibly … Yes? Where’s the harm? Think like an entrepreneur and care more about the results.
So maybe create something that just works, without running into bugs, errors, warnings, issues.
Get the job done and you’re done. Time to tackle another task and let others shine.
Understanding the client
Paying clients approach you for sort of an idea ping-pong. They may exactly know what they want, but not without some sort of a doubt. Maybe they even have the technical prowess to get it done themselves, but they choose not to. Beyond many reasons they hire you for, you’re the wall they bounce the ball off.
Your job in this dance is neither to be a yes-man, nor is it to despise every idea they throw at you while desperately trying to sell your own idea. Listen, understand, bounce around ideas and come up with an even better and simpler solution, together.
Even harsh criticism can be approached in a positive manner. Use it to make something more valuable for both parties involved.
When you’re not working with clients, you or your team could be your own client. In-house solutions and tools for your team are the greatest boon to a modern company in a world of ever increasing complexities, technical requirements and expectations of a speedy delivery. Listen, engage and build the tools your team needs the most and you probably have a good product/service on your hands, one to reduce complexity and make your team’s life easier. Bingo, you just found a potential product or service to sell as a free bonus.
Stop showing off. Start delivering value.