I have a recurring problem in my professional life; I program too much. I don't mean I sit around and actually type letters into an IDE too much (although my girlfriend might tell you otherwise), I mean I have a tendency to over-complicate a simple solution into a much more complicated one; and it's wasting all of my time.
The first time I noticed that I had this tendency was the day I tried to write my own Python logging utility. Now, for those that don't know, there is a Python logging package that I eventually ended up using, but that was after half a day's worth of work writing my own function when someone pointed out that a Python package already existed for that. See, the problem was that I wasn't even aware of the existence of a logging module and, more to the point, at that time I didn't even know that I should be on the lookout for such a thing. It as a lack of knowledge about what to even look for in a situation that was kicking my butt.
When I learned about the logging package I went through a phase of emotions. Dangit, I was proud of my little logging utility! It was my code with my style and it logged exactly like I wanted it to. But in that situation I was faced with a simple truth: the logging package that I was trying to avoid using was created by a community of experienced developers who had troubleshot and resolved issues that I couldn't even know existed. So I spent extra hours stripping it back out to replace it with their logging utility instead of my own.
That was a small example, not exactly world ending, and it only cost me a few hours; but once I stepped away to learn and create on my own, this problem of over-coding became the problem of my life. I'll give you a bigger example.
When I started this whole thing, I was determined to do things differently that I had learned them. One of the decisions I made during this process was to use MongoDB. I had years of experience with SQL, but I wanted to learn Mongo, so I strapped it right into my applications. And not just one application mind you, but all of them. I'll write about the specific fallout from that in my next post, but suffice it to say that I'm not using Mongo anymore in any of my projects, and that decision was made from information that I could have found before if I'd known what I was looking for, or even to look for it. The time spent stripping out Mongo for SQL are humbling hours, and they again came from a lack of knowing even the right questions to ask.
Now, when I express the sentiment of wasted time to people, they typically respond with "Well, there's only so much you can know" or "that's not your fault because...."; and in a way I agree. I made beginner mistakes in most every field I came into and that's to be expected, but the thing is that I want to learn and utilize new technologies and ideas for the rest of my life. And the nature of learning is that you're always a beginner at something, so really this lack of perspective that I've been facing is not a problem that will go away, I intend for it to be there for the rest of my life.
I ultimately made those and other mistakes because of lack of foresight and planning; and because I didn't know the right questions to even be asking. I knew how to learn the tech, but I didn't know how to stop myself and ask "should you be learning this right now" or, "is this even necessary." Without the constraints of a job telling me what to do and giving me due dates I was allowed to kind of wander off and waste time learning new tech that I would never use, or that wasn't necessary for the small apps I was building (see: Kubernetes). My biggest lesson has been how to manage myself, my time, and my focus; but it's been the hardest, and it's the one I'm still learning.