Software - Different Traits for Manufacturing vs Service?
tachin asks: "We've all been hearing about software as a service industry as opposed to manufacturing, there are some differences that favour that view, but I wonder if the type of industry affects the fundamental design of a software system. Considering the differences between those two types, are there some software constructs that are appropriate for one type of industry but would be undesirable for the other? As economies everywhere are becoming more service-oriented, what are the main characteristics a software system must provide to work well in such environments?"
You can blow all kinds of holes in these arguments by clearly defining what "tangible" really means. To say that because you cannot touch, smell or taste software it is intangible is incredibly flawed logic.
The code behind software can be printed. It is stored physically on a disk. These two things are good enough for the patent office and copyright law. They should be good enough arguments that software is indeed tangible. Another, somewhat easier, way to look at it is this: "Once you pay for it, it's yours forever."
You could also look at it this way:
If you are contracted to write a specific piece of software for a company you are performing the role of the manufacturer, and they are the customer. The price is variable, but once the project is complete the price becomes fixed. The company has a tangible product and does not need to contact you further. (Support contracts and the like really are separate products entirely, which most certainly qualify for the "service" mindset.)
Likewise, when a company employs an IT staff to maintain it's internal systems it really is a service role.
You can play all kinds of accounting tricks when you're supporting software. Does the cost of support add to the cost of the software? Not technically, the real cost comes from the hiring of support staff who likely service a wide range of internal systems. You can assign additional VALUE to the software though, since you have an established knowledge base with it.
The web complicates things a little. You subscribe to access to a web-based service. It is not tangible to YOU. It is tangible to the company you are subscribing to. These services fit both the manufacturing and service mindsets:
- The service provider contracted or hired the talent to build the software in the first place. This is manufacturing. Major upgrades and additions to the software are also manufacturing.
- The service provider contracts / hires the services of programmers to maintain their environment.
- The customer is purchasing a service from the provider.
I'm not sure if this even answers the questions asked. But it's 5:30am and it looks pretty good to me.
#1 Summary of your point (?): On the one hand, if software made in-house is used by 1000 people that's 1000 users of that commercial code...yet on the other you say if your servers have software that represents the bulk of the source that source should count too.
Reply: The calculation for lines of code was never intended to be per-machine, it is "total lines of code written everywhere" = COTS_loc + remaining_loc. Oracle does not create a brand-new code tree for each and every machine it has licenced, yet spreadsheet macros and Access databases tend to be written on a regular basis, typically for well under 1,000 systems. (COTS ~ 'common off-the-shelf software'/sold as a product)
Having worked at both COTS software companies and on custom projects the difference between a product and a project is not trivial. The best contract software shops blend the two, though much custom code is still created and the volumes don't approach Word or even AOL cds let alone Oracle DB server. Moving an entirely in-house project to a product status almost always fails (with some noted exceptions).
The rest of your comments I either agree with in part or in whole.
"Ease of use" - One law I've learned:
You can think of this as related to any complex system.
A hammer is simple, requires some training to use, has a limited set of problems, and skill with a hammer increases over time.
A nail gun is not simple, requires less training for the basics, has a variety of simple and complex problems, and experience matters quite a bit less over time.
That said, I'll take the problems with a nail gun over having to use a hammer almost every time.
Another example: At one of the COTS companies I worked for, our tech support questions on a utility program were almost always one of the same 5 questions. Time to answer each one was about 5 minutes.
The answers were obvious though the tweaking was difficult for a mere mortal. The thought was "if we automate the installation process so that it configures the utility automatically...people won't have to call us as much".
So, after a massive effort of automating the installation and configuration process, those 5 pesky 5 minute questions went away...to be replaced by 20-45 minute questions on a variety of issues we never realized existed.
The 'new' problems always existed, we just did not see them.
A firewall can not protect you from yourself. Turn off what you do not need. Do not use the firewall to do your work.