I recently noticed that I've slowed down in my older age. I thought about this a lot. I'm amazed at how quickly programmers fresh in their careers get things done; I also remembered that I was renowned for getting things done quickly myself at one point. I was blazingly fast and churning through piles of work. At some point that started not to be the case. Was this cognitive decline? Ageing? Although... 31's hardly 'old', or at least that's what I keep telling myself.
I consciously thought about this as I picked up new tasks recently and tried to be mindful as to where I was perhaps slowing down more, where I wouldn't have done previously. I came to one striking conclusion.
More options at every turn
I noticed I spent more time thinking about how code might be extended further down the line. I considered what options people could take to add additional functionality, I thought about design patterns that might be appropriate, I thought about naming methods and variables so as not to reference any specific piece of technology or service. I spent time thinking about abstractions that might hide away certain aspects and 'details'. The overall design, where does it fit into the product, who's going to be using this, etc, etc. When I was first starting to find my feet, I was so focused on the very narrow scope of the specific problem I was working on, and I wrote code specifically to get the immediate problem solved, and didn't think about much else beyond that.
As you become more senior, you're expected to at least think about more than just the technical scope of your work. I remember having one to ones when I was a junior, where the feedback would be 'think about the product as a whole', 'talk to the project managers more', 'try to think about the roadmap', these types of considerations all seemed like external problems, beyond both the scope of my, a). abilities, b). interest, c). job description. The more senior you become, the less that's acceptable.
I also wasn't thinking about whether this factory pattern was idiomatic Go or not, I wasn't writing abstractions and interfaces to separate business logic from the data access layer. Hell, I probably didn't have a layer dedicated to the access layer. I probably had an express app that was directly querying a MongoDB database.
It occurred to me that experience had slowed me down. Each problem I faced, I had a lengthier list of options to traverse and rule out at each turn. It sounds counter-intuitive, to posit that experience slows you down, rather than what you might expect, which would be the opposite. However, it makes sense the more I think about it.
It's also not a bad thing, it's something to consider, and if this theory is correct, then there are specific implications to consider when choosing a role. Suppose you're pushing a decade of programming experience and you're working at the next hotshot start-up. In that case you might need to work on cutting to the chase more, accepting 'good enough for now' more, and leaving some of your acquired knowledge at the door, or at least getting good at knowing when it's appropriate to apply some of that more theoretical know-how. This is something I've had to work on myself, being in a fast-paced environment. That in and of itself is a useful skill to hone.
A final point, I'm not suggesting that if you're experienced, you can't work in a start-up environment, you might need to practice keeping things simple and accepting possible trade-offs. I'm also not suggesting if you're fresh-faced out of university, you shouldn't work in a slower-paced environment, though it may influence your learning priorities to pick up the more formal engineering practices, rather than focus on rapid prototyping and delivery for example.
I'll end by saying if you've felt yourself slow down in recent years, or as you've become more senior, don't view that fact as a negative, re-frame your experience for your environment. Try to be more involved in the design process, guide and shape things more. It's a great opportunity to breathe, to think about the bigger picture, and to step up in other ways.