Is there a word or phrase to describe someone who is willing to do extra work in the short term to avoid work in the long run? I have seen "lazy" used for this, but I'd like to know if there's a more precise term.
Well, that's what software engineering/architecture/development is all about. And it's not about laziness, its about efficiency. Maintenance costs grow exponentially (in time, effort and money) when the base is poorly designed. The more money or effort you spend on the early stages of any development project, the more money squared you save in maintenance costs. I've seen tons of software projects to turn unprofitable because of lousy architectures, just because the project started as a quick fix after quick fix. It gets to a point where the project needs to be blown up and started from scratch, or be prepared to waste lots of money on maintenance.
As for a term for this concept, maybe
long-term laziness (kind of a humorous term) (good design, low maintenance costs) compared to short-term laziness (poor design, extremely high maintenance costs).
I'm personally very lazy in nature, and that's why I work so hard when programming. I don't like to do things twice, and that's why I try to do them right from the beginning, even if it implies much more effort. I know that extra work will eventually pay off, and will let me lay on my back afterwards, or at least do the required work with minimum effort. Maybe plain old
being time-smart or
being effort-smart would do the trick.
Long-term effort minimization strategies in any given activity would be another good and general alternative to describe these kind of situations.
Lazy isn't necessarily a derogatory term. Those of us who practice the behaviour you mention often refer to ourselves as lazy, and mean it in a positive way. "If you want a job done right, give it to a lazy man", someone once told me! :)
You might be looking for a word like "pragmatic", though that's not really related to lazy at all -- it just fits well in the sense of "he has a very pragmatic approach", which can imply that he doesn't do a sloppy job now that would require re-work later. That's not the real meaning of pragmatic, either, but it could be used that way.
"Thoughtfully precise" is probably too verbose, but gives the right idea.
In writing, you might say someone was "concise." I'm not sure if that applies to actions. "He is a very concise programmer"...? Maybe.
If you're just trying to convey the idea, it might be best to spell out exactly what you mean. "He is very good at getting to the core of the problem and focusing on only that which needs to be done. He doesn't try to slop-together half a solution, thus generating more work for his future self."
@CR Drost recently posted the following question, which was just closed as a duplicate: How can I more aptly describe acceptable laziness?
Given its close connection to your question, I'm going to answer the question posted by @CR Drost here and in the process respond to your question.
My response to question posted by @CR Drost:
"Neutral laziness" involves actions taken for the sake of convenience.
Merriam-Webster: convenience -- something conducive to comfort or ease.
"Positive laziness" involves actions taken for the sake of expediency.
Merriam-Webster: expediency -- the quality or state of being suited to the end in view.
My response to your question:
Expediency, which is not mentioned above, may be the word you were looking for.