On more occasions than I like, I've been asked by pointy-hairs why my initial efforts in a given project take "so long" [1]. My mentality with regards to almost anything development-related is to put forth more effort initially so that I can put forth less later on. If you compound the time savings for subsequent uses of your project, your initial efforts will look very small.
A recent example of the above would be a small tool that I wrote to convert a bill-of-materials data file from a client's business software and convert it to a tabular format for use in a relational database. A lot of older business software platforms seem to like using monolithic data structures with all the information for a given record on the same row; makes it difficult to generate reports. It took someone else a little over a half an hour to perform the conversion. It took me a little over an hour to build a tool in C# to perform the conversion. It takes the former a little over a half an hour each time. It takes me less than 2 minutes each time using my tool. You can easily see the time savings here, but that is not what is at issue. This is a fundamental difference in thought process, and the perception of those who would rather repeat a task every time will always perceive those who hack out tools as being slow--at least initially. This applies to almost all facets of development, not just tools.
Even when there is a need to develop a "disposable" tool, a tool which is ostensibly useful only a single time, they seem to find a way to recycle themselves in the future. I'd say it's a conscious decision on my part to always build a recycleable tool even for remedial tasks, but it's not; I can't think any other way. I believe most developers are this way, and so does Steve McConnell:
Suppose you're given five hours to do the job and you have a choice:
- Do the job comfortably in five hours, or
- Spend four hours and 45 minutes feverishly building a tool to do the job, and then have the tool do the job in 15 minutes.
[Code Complete p505]
When I was thinking about this, I remembered reading the above in Code Complete many years back, so it seems a lot of what I read really did stick with me. A lot of technical books I assimilate then expunge.
I will stick with my current mentality. If I do one task more than once and the second time around it takes the same amount of time as the first, something is wrong.
[1] The perception of "so long" is usually without reference to the equivalent that takes less than "so long", so it's entirely subjective.