When all you have is a hammer, every problem looks like a nail. And when that tool is the ability to craft code, it is very tempting to try to code your way out of any problem.
I have always worked for small companies, or in small business units. I have never been part of an "army of programmers" at any large company, so please keep that in mind. But I bring this up because throughout my career, I probably wore the hat of Product Manager in addition to "Software Engineer" almost all of the time.
I look back on the early years of my career, and probably have wasted many months over-engineering solutions to problems that never really existed. I can remember an advertising analytics system I built in the early 2000's before companies like DoubleClick were acquired by Google. And back before agile was a buzzword, one I might add is still extremely important.
So let's setup the story: There was a need, at my job to serve ads, and somehow my bosses decided I was the young man for the challenge. I have some guilt associated with this project, because I felt like I spent weeks building an extremely sophisticated solution. I can remember all the html tables and sql queries that I poured through. All of the unnecessary features I felt were necessary. Being a junior programmer and having proven myself at the job for a year or so, I probably cashed in some of the trust I had built and probably said something like "oh just give me a few weeks".
I can remember delivering the project to my boss. And it worked. But I also remember all of extra time I spent after delivering it, burning the midnight oil to fix bugs in this Byzantine system I had built, which probably was more complex than an Antikythera
I'm sure it has long since been replaced by a SaaS offering , but I am also 100% confident it was extremely buggy.
Anyway, I don't remember coming back to that project much, and no one fired me over it...but still...something about the experience haunts me.
Cut to 5 years and two jobs later. I was running my own startup (spoiler:no exit) an audio recorder on Android. And when you are in the hotseat, when you have 100% ownership of a project, and when this project is also 100% of your income you quickly realize feature X or bug Y needs to be out the door yesterday to clear time for the dozens of other high priority tasks necessary in driving the business forward. And through this experience, I began reflecting on the things I had done in the years prior.
Yes, I had started open source projects before, and taken on projects for clients where I built, shipped and maintained codebases. And I had lots of jobs, but it still did not compare to having 1 critical product being the sole source of your livelihood. That was true and total ownership. No clients, no bosses, just me, my codebase and the market.
Now, writing code is fun. Sneaking little UX improvements into a project after your day of work is satisfying. And planning for scale that is theoretical and not actual is a common problem I see.
And! I think there is something intoxicating about the ability to create whatever is in your mind. And I don't expect Junior developers or engineers to be able to code as quickly, or manage expectations as well as a senior level engineer.
But, here is my advice: try to own your product as much as possible. Maybe it is asking for, or grabbing more responsibility at work. Maybe it is participating in hackathons in your off hours. Maybe it is launching a website, or app or product on your own.
And through that ownership will come pride a real and palpable sense of responsibility and eventually an incredible amount and diversity of experience. Hopefully, one day that experience will boil down into some wisdom. And maybe one day, you will be really really good at scoping out and judging exactly how much code needs to be written to get feature X out the door, or to fix bug Y! Cheers!😉 And I wish you luck, inspiration, satisfaction and happiness on your engineering journey!