So I have this tool at work. Basically it’s a robot arm that moves the ‘widget’ from these positions in this sequence:
Home–>A–>B–>A–B-->C–>Home.
The only change I wanted to make to this tool is:
Home–>A–>B–>C–>Home
So I call the vendor thinking some IT guy will log on to the tool remotely, change a few lines of code, and boom; 10 or 15 minutes later; problem solved.
Nope. They guy told me it will cost 100k and two years to develop the software!
WAG2: It will be a lot more trouble for them than it’s worth doing, so they quoted you a completely nonsensical number so you won’t take them up on it.
The factual answer is, unless the software was designed to be modified remotely (and some tools are), it can’t really be done in the way you want. Also, unless the software was designed to be modified (usually considered a hallmark of good design), modification will be unpredictably difficult and require an unpredictably long time.
Software design is engineering, which is all about trade-offs. (Kinda like economics in that respect.) Someone may have made the decision to trade off ease of modification to gain some other desired benefit, like efficiency or how long it took to complete the project.
For a tool like that, they should make it easy to reprogram it without needing anybody to write new software for it. For example, specify a number of inches (x, y, z) to move for each step, which can be entered into the program that controls the arm, which in turn converts these numbers into movement (i.e. the controller routine just reads in numbers and moves the arm as directed, instead of having hardwired movements, like if you had a microwave that could only cook for a certain amount of time).
1, all their other customers want it the original way, and they don’t want to have n copies of the machine out their with n different versions of the software.
There is some good reason that it needs to repeat A -> B. Does it do something at these positions? If so, maybe it is checking that it really did it.
Making the machine generally programmable would be good, but a lot more complicated. With fixed programming they can guarantee it works - without they need to add lots of checks to make sure the arm don’t whack you up side of the head or something.
As for the quoted charge, I’m guessing that is polite for “go away - dealing with you as a special case ain’t worth it.” They may not want to set a precedent of doing special requests.
When I was doing EDA software demos at trade shows, we got a lot of suggestions. The appropriate response was “that is an interesting idea.” We were thinking something not nearly as charitable.
Software can mean different things to different devices and at different levels within the same device.
Take your digital clock radio. Your radio presets and alarm times are saved to the radio and can be thought of as configuring the software. But say you wanted the LCD channel/time display to be the mirror image of its ordinary characters. The 3 looks like an E and 2 like a 5 and whatnot. It’s obviously not in the manual and it will be a whole lot of reverse engineering and writing new code to replicate the dedicated LCD driver IC’s and now there’s more wear on the left side display segments and who knows what else.
Big hassles to change something that wasn’t meant to be changed.
However, $100k and two years seems excessive in any case unless this is the arm on the space shuttle’s successor or something.
My boss does this. It’s pretty funny to overhear, and funnier to hear him cursing after some customer decides they really do want some weird modification and are willing to pay his exorbitant price for it.
The cost to make a simple change to software can be very high. As already mentioned it’s undesirable to have multiple copies around. Simple modifications can be very complex. Someone who understands the whole product has to know whether the change is really simple or not. The code you are running is most likely compiled object code and the change requires rebuilding the entire application to install. Any changes have to be tested, and programmers aren’t necessarily good that. Involving a Quality Control department to test the changes can be expensive. For the change to be supported it must be tracked somehow. When you complain about it not working whether or not the problem is related to your change the support people must know you have a special version. Those changes also have to be tracked in source control making all internal operations more complex. Often software developers are on a tight schedule and taking someone off a project for a even an hour won’t be readily accepted.
If a software company is not in the practice of providing custom versions of their software then the actual cost and time to complete even a simple change can be very high. $100K and 2 years is a sign that they do not want to do it all.
Here is one experience I had with SUN. I got a SUN computer about 20 years ago along with a printer. The printer accepted only ps files (IIRC, or maybe it was some proprietary format). SUN wanted $2000 for a “filter” to turn ordinary text files into whatever format the printer took. A grad student wrote one in 15 minutes.
And whether the vendor was the company that actually developed this in the first place, how old it is, etc.
And did they say the actual change would take 2 years to implement? Is it possible they are quoting the cost of supporting the modified software for 2 years? Is it a safety-critical software? (If it were NASA flight software, it’s not inconceivable to require that much cost/time to get the design change reviewed, implemented, and tested and verified.)
Also the software might be some kind of non-updateable embedded system, and thus require a hardware procedure to update it. Which would also increase the time and cost of the development cycle.
I don’t know anything about the specific software, but in response to the general question posed by the OP, I would say software development is one of the least racketable industries out there. It’s subject to market forces just as much, if not more, than anything else. As everyone knows, because of the nature of software dev, it tends to be much more easily outsourced to other countries where labor is cheap and plentiful.
So, the question I would ask then is, why hasn’t someone else made a program that allows “Home–>A–>B–>C–>Home” to be implemented in 15 minutes for a few measly bucks, if it were that easy?
Me: “You want dedicated service from Taipei Taiwan to New York city?! Um, OK, that’ll be $1M to set it up and another $1M per year for the service :D”
Them: “OK, when can we have it?”
Me: “OK?! (GOD DAMMIT!)”
That quote is a polite invitation to go pound sand.
Which is why you got the quote, and why source code is good. This is another case of them not being willing to stand behind custom software.
I used to manage a group doing software for internal use. In that model your customers know the phone number of the developers, and a lot of stuff is loosey-goosey. When we started selling stuff outside we put in a release schedule and reviews of all changes, because it had to be more rigorous. After I left and became a customer of this kind of software, we started doing evaluations. One of the packages we looked at came from a big company trying to sell its internal software. One of the “advantages” was that if we bought it we could call the developers directly for changes. That was when I decided we’d never buy from them, since they had no idea of what doing commercially entailed.
Hacking stuff for the guy down the hall is a lot different from writing code that will go to 500 people you’ll never see and which will have to be supported forever by company guys you will never see.
Industrial Software is quirky. My Brother and I were discussing the stuxnet virus and he joked that it wouldn’t affect the mill he works at because the machinery is controlled by *16-bit *hardware!
If your machinery is older than what?, maybe 10 - 15 years it could require Firmware (Programs directly on computer chips) reprogrammed, or anything. - and maybe that one guy who knew the specialist programming language died or retired or something…
Yeah, sorry for being so vague. To be honest, I’m not exactly sure what is and what isn’t proprietary information with regards to my work. So I kept it vague to keep my paranoid butt from getting fired.
To put this gently, that may reveal how little you know of the underlying code, potential problematic interactions, and serious gotchas that might crop up.
The less you know about programming details, the easier it looks. It calls to mind the expression, “ignorance is bliss.”