SlurrerOfSpeech said:
However I'm not sure I have become faster at delivering work items.
I won't say you should necessarily, as long as the work items are quite or vastly different from what you have already developed and for the time span you talk about. Software development skills need a lot of time to mature but the whole thing is also very dependent on specific factors, which would make for a very long discussion.
SlurrerOfSpeech said:
It used to be that someone gives me a business problem and I could whip out a solution that works, although my code was "bad." Now it takes me the same amount of time, but my code has 100 layers of abstraction over the concrete business problem. This is all very "good" code as it can be justified with "We can easily swap out some dependency and it will still work," but I question whether this future-proofing pays off on average.
A solution that works but written using "bad" code - I assume this to mean not thoroughly thought /designed and / or tested and / or documented, won't give a brilliant future to your application and I think it's needless to say why as it is very obvious. On the other hand, giving an unnecessary lot of layers of abstraction without the
appropriate design work beforehand, is also a call for trouble. Abstraction is neither for free nor of low price, generally speaking.
It definitely helps towards having code that can be modified / adapted without lots of effort and in a number of other things as well, but overdoing it will have performance costs - to say the least, and finally will lead to a complex piece of code for which it is many times very questionable if it is reasonably inside the demands and the constraints of the solution needed. Unfortunately, it is very evident that software development has followed this trend in many kinds of applications. Leaving aside the professional reasons that justify this, including protection of intellectual property, I think that the whole thing goes out of hand in a vast number of cases.
Now, for the question of future-proofing, I would say that in most cases it pays off on average, as long as the client remains inside the boundaries of what he / she has initially asked for. As
@PeroK says, don't be surprised if the client asks for something that will essentially cancel future proofing. So, I think that keeping reasonable measures is the best thing to do.