By arranging the way you manage software development, you can reduce the need for change requests, and make money more honestly by liberating your customers instead of making them dependent upon you. Here are some rough ideas (suggestions welcome) to begin people thinking about how to keep quality in the code, rather than in marketing. Marketing should optimally rest largely in word of mouth, because this is how quality propogates naturally.
Short term software
expensive to maintain, manage, and interact with, because it was
designed by people who make money from change requests.
Long term software
cheap to maintain, manage, and interact with, because money is targeted
specifically to building quality software, not marketing or change requests.
Short term software
requires extensive rewriting in order to add functionality, or to scale
to more operators.
Long term software
designed to scale cleanly from one to fifty thousand operators, and is
designed to integrate cleanly with all possible future additions. Adding
functionality does not require extensive rewriting.
Short term software
upgrades are not backward-compatible, introduce unrequested features,
and often make the application run slower.
Long term software
upgrades are backward-compatible, they are a product of detailed
customer interviews, and they include code which optimizes for speed and
size, because these are part of the natural evolution of sensible software.
Short term software
has no plug-in interface or API so that it can be extended by
third-party vendors.
Long term software
both by nature of being open source and within its architecture, has a
plug-in interface or API so third-party vendors can add elegant
functionality.
Short term software
is hard to sell, and requires a whole layer of salespeople to convince
others to buy it and then manage frustrated customers.
Long term software
sells itself, is a joy to sell, and requires technical account managers,
not salespeople, to represent it.
Short term software
relies on copy protection schemes to limit the number of duplications
because this allows salesmen to sell it and make a commission.
Long term software
needs no copy protection, and is open-sourced from the beginning because
money should be made from work, not from selling. Anyone who finds the
software can duplicate, operate, or improve it freely, even including
people who take advantage of this freedom because in the long run,
enough people will pay the fair price for the software.
Short term software
needs marketing and is thus overpriced, which encourages piracy.
Long term software
sells itself and is thus fairly priced, which encourages honesty.
Short term software
tries to accomplish too many tasks with a single application, because
such a package can be sold for more money by having "more features."
Trying to do too much with one application means more and more submenus
and keys on the keyboard are mapped to obscure functions, raising the
chance of somone hitting the "wrong" key.
Long term software
is targeted to a specific real-world need, function, or interaction.
Intuitive, simple, and redundant ways to operate the software allow
for anyone to use it according to their skill level, gracefully
learning how to operate it better over time, redundancy raising
the chance of someone hitting the "right" key.
Short term software
eventually becomes very difficult or tedious to use because operations
change over time but the software doesn't; it includes no internal macro
interface because this is expensive to include.
Long term software
includes an integrated macro ability because this allows an operator to
minimize tedious and repetitive work, in a manner which can be modified
without paying the developer.
Short term software
keeps its data in a proprietary format because this is a way to funnel
more money into the developer's hands if changes need to occur.
Long term software
handles all transactions with an open database engine so any other
authorized software can retrieve its data. This is true even when the
data itself may be securely encoded.
Short term software
tries to handle security issues within the structure of operating
the software, which is not practical because security measures
introduce operating complexity.
Long term software
leaves security out of operations, and in the hands of specialized
security software and firewalls, whose complexity is justified and
targeted.
Short term software
is developed after a few interviews with the customer, and without a
clear understanding of how it will be made bug-free in a manner that
costs nothing extra to the customer, because this is a way to make money.
Long term software
is developed after exhaustive interviews with the customer, including
meetings with all people who will operate the software,wherein there is
an extended question-answer period. Bug fixes and change requests are
included in the final fixed-cost contract, which means that the initial
cost is higher but guaranteed to be a one-time expense.
Short term software
is created by a developer who reads requirements definitions written by
someone else, and by a developer who never personally interviews the
customer. Sometimes, he never even meets the customer until he starts
receiving support phone calls, and often the customer has not taken the
time to carefully read the requirements definition to see whether
anything was missed.
Long term software
is created by a developer who is present in all requirements definition
meetings with the customer (even if he is only a silent geek), and who
helps draft the requirements definition, and who is present when each
single line of the requirements documentation is carefully read out
loud with the customer and discussed so that it properly represents
the proposed operator interface, database design, testing, change
requests, and bug-fix policies.
Short term software
is developed primarily as a way to make money, secondarily as a tool to
help the customer. Thus money is always a factor.
Long term software
is developed primarily as a tool to help the customer, secondarily as a
way to make money. Thus quality is always a factor.
Short term software
is designed by a programmer who does not know what constitutes physical
labor because he has never worked his body, only his mind, and does no
interview with operators, and thus has no understanding of how to
accommodate for the real needs of the daily software operator.
Long term software
is created by a programmer who has worked physical labor at some point
in his life, and participates in customer interviews with those will use
the software. He thus codes with the customer's interests in mind,
instead of his own ideas about how to improve things.
Short term software
is created by a coder who lightly tests his software in a real-life
environment, relying on the customer to beta-test it for him.
Long term software
is created by a coder who personally operates it for at least a full
8-hour day during pre-release testing, standing next to people who will
use it all day long, so that he knows its true limitations and can
prepare appropriate workarounds.
Short term software
is closed source, or "pay for the source code" so that the developer can
make more money if it needs to be repaired.
Long term software
is open source so anyone can modify it with little effort. this protects
the customer, who can go to someone else for help if necessary.
Short term software
insults the operater within source code comments never seen by the
operator because the programmer has no compassion for real-world situations.
Long term software
acknowledges its own weaknesses within source code comments, so that it
can be easily improved by others.
Short term software
is lightly commented, and must be replaced instead of being improved,
because few can read the source code, and those who can rightfully
charge lots of money to do so.
Long term software
is internally documented with source code comments explaining each
variable, decision-consequence, function, loop, calculation, and
operation so it is easily repaired or extended.
Short term software
breaks in fundamental ways, because it was designed quickly by people
who make money on change requests.
Long term software
breaks in superficial ways, because it was designed slowly and
carefully, by programmers who know all change requests are free, and
thus it is worth their time to build it right the first time.
Short term software
is lightly documented, and documentation is not used by customers
because they don't take the time to study it.
Long term software
is elegantly documented, half internally with "help" popups, and half
externally with troubleshooting and clear instructions including
screenshots. The project manager also takes plenty of time to review the
help documentation with the customer so he doesn't receive support calls
regarding information which is easily found in the documentation.
Short term software
carries cryptic error messages which are useful to the programmer, but
which startle and confuse the operater.
Long term software
carries detailed yet friendly error messages designed to inform both the
operator and the programmer in case of an error.
Short term software
contains significant changes from the initial requirements definition
because the requirements were quickly written.
Long term software
fulfills all aspects of the requirements definition, because
requirements actually match what the customer needs
Short term software
costs more than the customer originally thought it would.
Long term software
the cost is fair, and remains fixed.
Short term software
source code is churned out as quickly as possible to meet deadlines
driven by money; time is money.
Long term software
source code is a work of art even though the customer may never see it;
time is quality. money will find quality, wherever on earth it appears.
Short-term vs long-term has nothing to do with OSS/Free Software vs
proprietary, nor does it have anything to do with usability or
scalability. I've seen plenty of "short-term" OSS/FS software, and
plenty of "long-term" proprietary software. And frankly, "making money
vs helping the customer" is a ludicrous assertion, as if the software
doesn't do what it's supposed to (ie help the user) then you won't get
paid for it.
Nearly everything you've written above can be summarized into one
simple assertion: The difference between short-term and long-term
software is the amount of time you're willing to invest into it.
Both at the onset and down the road with subsequent modifications.
The main problem with your idealistic view of long-term software is
that you assume the requirements are rigid and well-defined at the onset
of the project, and will not change. Otherwise, you have no way of
knowing what features to design into your project. If you get a
fundamental requiement change, then the "short-term" software is FAR
simpler to re-work than the much larger and more complex "long-term"
software.
So after all of this, I assert you aren't talking about "short-term"
vs "long-term" at all, you're talking about "good practice and
bad practice". But even that doesn't apply, as there's plenty
of circuimstances where "short-term" software is the RightChoice. I'm
not going to spend three months to build the best damn WidgetAnalyzer
ever made if all I need to do is spend two hours to build the
"WidgetColorChecker" tool and promptly forget about it for the next two
years. Opportunity cost is very real.
"short-term" vs "long-term" is an initial requirement, just like any
other.
And just to be nit-picky, your comparison on security is backwards.
Security needs to be designed into software, not bolted on afterwards.
"Short-term" leaves security out, while "Long term" includes security in
the design. Remember there's a lot more to "security" than a firewall,
which is nothing more than "can person X access this software?" when
instead you need to have questions like "can person X modify this data?"
I could go into a lot more, but I have plenty of long-term software to write with short-term requirements.