- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
Best post ever...
Captcha: kungfu (!?!?!?)
Admin
DLLs can often solve the problem here where configuration files don't really cut it--no need to anticipate the kinds of changes that will be requested. Customer gets their own set of .Dlls for the functions they've changed. Keeps obsolete code from filling up the executable.
Admin
Really? My faith in humanity increases every time I see something like this.
But then, my theory of life is, "People are stupid." The beautiful thing about this theory: every day, someone proves me right.
-- poss
(And the CAPTCHA test is "darwin" -- how apt.)
Admin
Media Center is based on XP Pro, btw.
Admin
the real WTF is that I thought the mentioned WTF software was the same as the sponsored link ...
Admin
All good points - my experience is that none of the "5 minute" changes could support the cost of re-writing the app to be configurable by themselves, so the configuration code can never get written because it never gets funded.
Admin
This isn't THAT uncommon. The WTF'yness of this kind of thing is inversly proportional to the size of the wallet of customer #1337. The scenario is typically:
Admin
No kidding, when I clicked on that link there was a rotating ad on my screen for "Dewalt Tool Battery Sale" Coincidence? Is this the fabled Storray engine in operation?
Inquiring minds want to know.
Admin
My solution can offer significant savings over your solution: give everyone who uses the app tinted sunglasses.
CAPTCHA: *pointer
Admin
Not necessarily. This simple change should trigger a full QA run. Quite often, stuff like this gets only smoke tested, but if the customer requires, for example, WHQL, you have to run all test suites again, submit the whole shebang to Microsoft's QA, pay about $2000 and wait a week for them to process it.
Huge PITA for crap like this to say the least.
Admin
"I mean, paying for a feature only THAT PERSON is going to use? I'd either ask an horrorful and huge ammount of money (not that much...) or just say no. "
Basically, this is how many software companies make money out here in the real world. It's how software that's really useful gets made.
And this is how it should be: software as a tool that solves a problem.
Customer: "We have problem X". Software Vendor: [think, think, think]. "Well, here's one way to do that". Customer: "Sounds good, here's some money." Vendor: [hack, hack, hack, deploy].
Not some shiny appliance that comes in a shrink wrapped box that just sort of does something arbitrary, and maybe you adapt every other part of your business to it :)
Admin
Why spend the time redesigning your UI to accept a new parameter, then work 1/2 an hour coding the program to accept and store the new configuration parameter, when 60 seconds of coding will do?
Admin
Yeah, but then you got to regression test them and maintain them.
Though I guess you have to do that with random in-line customizations too.
Admin
If one customer wants a color changed and it'll take half an hour, you tell them to drop dead. (Or, perhaps, a politer form of "no".)
If a thousand customers want a color changed, it's faster to write the code to edit and read a config file than to implement the change once per customer and end up having to tweak them frequently - and you also get a new feature for the next release.
I'm sure there's exceptions, but the "only fix a bug for each customer who dicovers and reports it" plan bothers me, and the messing around with tiny cosmetic changes seems probelmatic. What happens when one customer wants a new dialog box and another wants the same functionality in a menu? Implement both, but only for the requesting customer? It just seems wrong to me.
Admin
No offense, but you clearly have never worked in the customized software arena. Many, many companies have gotten fabulously wealthy marketing a base product and selling customizations as a time-and-materials project. An even better part of the equation is when a major rewrite can be re-sold to the entire base along with $ to port their customizations.
This method of customization, while ugly, beats the common method of forking the codebase by a mile.
Admin
and no one has given the fact that there is c# commenting in visual basic code a second look?? that's the wtf
Admin
And then one day someone decides that your application has to also speak Spanish, and all your application logic needs to be touched to accommodate it ... Seems like an odd choice to avoid an enumeration or other non-user-visible variable.
Admin
I /wish/ we did that. At least hard-coding how to do things based on the customer number is better than "such and such needs delimited values to be padded to their maximum width" -> minor code change which produces major(and wrong) format change -> release -> wait one week -> "such and such needs delimited values to have no trailing spaces" -> wtf
I expect in two more of those, I'll be allowed to make it user-configurable
Admin
Admin
I'm still wrestling with my business plan:
If anybody can help me with phase 2, I would appreciate it.
Admin
what??? "... not necessarily a bad thing"???
ever heard of the existence of other languages? i18n? good grief...
captcha: craaazy ..... indeed ;o)
Admin
I used to work for a software company that made a DOS app. Several other companies would OEM this product, so the programmer wrote the code so that renaming the EXE would give a completely different UI and either add or remove functions, depending on the OEM. Language changes were as easy as rewriting the text file that contained all of the prompts.
That he fit that monster within 640K is nothing short of amazing.
Captcha: pointer (I'm a spaniel person myself)
Admin
yeah, right... even if so (and I know lots of apps that started out like that, but two years later - presto! - "well, we need to translate this into another language..."), never heard of pesky marketing departments that frequently request "new wording" for existing applications? relying on caption texts in application logic is just plain dumb, no matter if you ever require i18n or not. and the best part: doing it "right" is not more complicated or cumbersome (provided you use the right platform/language/technology), but it pays big time in the long run.
Admin
why not doing it properly in the first place? ;o)
if done like above it just gets worse and worse...
captcha: ninjas - there should be some of those to fight bad sw-design ;o)
Admin
just decide carefully, whose underpants you are going to collect .... ;o)
Admin
You can doubt all you want. But you would be wrong.
Admin
I have to laugh at these sweeping statements that it's a WTF if you don't put this type of customization in a configuration file. Our software is 95% standard, but for the rest, we use the method in this WTF.
For example, we sell software to governments who want to see their name in the caption of the main form:
MyProgram 2.1 for City of WTF, Richard Asshat, Mayor MyProgram 2.1 for WTF County MyProgram 2.1 for State of WTF, Arnold Schwarzenegger, Governor
So, let's say I move this info into in a configuration file. Now I have to train the flunkies who do the installs how to edit the configuration file, or give them multiple configuration files, or burn a custom CD for them, or set the configuration file options in the installer...golly gee, all that work, and all I've done is manage to move the point of customization from the executable to somewhere else! Whoopty doo! But hey, my executable is 200 bytes smaller than before, and I save a couple picoseconds when it executes. Ohhh. Ahhh. I'm a programming guru now.
Oh yeah, and when customer "X" asks for a feature that I already did for customer "Y", I don't want to tell him he can edit a configuration file to "turn it on". I want to charge him five figures and send him a new CD to make it look like I had to do a whole helluva lot of work, because -- let's face it -- that's Good Contracting.
I'll keep switching on the customer ID in the executable, thankyouverymuch.
Admin
Being the amateur blonde that I am, it is possible that I may be using improper coding practices in the first place (if this is the case, someone please let me know) but I quite commonly use labels to denote two different things, and the text of the label may change depending on a previous if or something like this. I have trouble thinking of an example for labels, but consider buttons: if the user selects function 1, the button text reads "save". If function 2 is selected, the button text reads "self-destruct". Obviously, that button is going to perform at least two different tasks, depending on the text, so I should probably do a string comparison to find out what is reads before executing too much code. Of course I can use another variable, or separate buttons or there are a million other ways to do it, but depending on the situation, I frequently find this to be the easiest. Applying to labels, as well. But I could be wrong, it wouldn't be the first time. :) (After all, I only graduated to the working world a year ago. :)
Admin
Sorry, last comment in regards to:
Reviewing the code, I found code where it was doing an if statement based on the result of a string comparison to the text value of a Label object.
Admin
Thats pretty much true. The background color is almost always white, no matter what you want (unless you specify high contrast black)
Admin
OMFG OMFG WTF?!?
Admin
You should be driving the flow from the state of the objects in your app, not the text on a button.
Admin
No, that's fraud.
Admin
Unfortunately that's not always realistic. What I try to teach my juniors is that I don't care if they use a quick and dirty solution every now and then just so they can keep moving - provided that they plan time for such cleanups on a very regular interval. Usually once a week I'll go over changesets with them and we'll find some parts where we easily agree that it's not proper code for anything of production value. We then fix it or set a cleanup deadline for the more complicated hacks. Works quite well.
For instance, we've had some customer specific hacks in our backend until the arrival of a proper factory system for loading this functionality as modules. With the factory in place, we can easily solve it properly now when the schedule is not so tight anymore while still making important deadlines when there was a tight schedule.
If you actively screen for hacks and dedicate time to removing them, it is possible to keep them under control. Best of both worlds, I suppose.
Admin
Well I am going to assume this isn't a troll. In general what you are doing is bad programming practice. You shouldn't rely on the string value of a button (for lots of reasons) Use an ID instead. Give your button an ID. Now you can change your text all you want, without having to change any code. You can even do some pretty cool things like translate your program, without having to change any code.
not to mention comparing two numbers is way faster than doing a string compare.
Admin
That is your tongue in your cheek?
So what you are saying, is rather than spend a few minutes to change a config file, and burn a new CD, you would rather dig around in the code to look for the proper string to change. Do a build, and then burn a CD?
Yeah, I know changing the code and rebuilding for a simple string change isn't a lot of work. But I would much rather just change the config file. I can still charge the guy big bucks. No need to tell him I was working smarter and no harder.
Admin
There are two types.
The purist software engineer wants to write the perfect product with the most perfect code that meets all coding standards, and is generally the most future-proof (if there is such a thing).
The businessman wants to just make money and wants to make it now. After all there might not be a future, it might be that nobody will want your product in 5 years time no matter how good it is.
For the businessman, as long as it works, it's good.
One of the saddest things I find about software is that bad coding practice works. You unramble the most horrible piece of coding spaghetti and refactor it to produce a really clean robust piece of code, yet the horrible mess of code works and yours doesn't (because you missed some complex logic hidden away in all that mess), often some minor details that is the difference between working and not working. Worse if people then accuse you of "breaking" it.
Admin
I've had to do this for financial software pricing derivatives - although I did at least use an environment variable whose presence indicated the rogue site. There comes a point when you get tired arguing that every other client agrees the functionality is correct and just agree to do it "their way".
Admin
Lots of people have mentioned that this company is probably in violation of security or standards rules for their client... what you have to remember is that there are rules and "rules" (wink wink). If you look at the real rules, most places are probably in violation 100 times over. However, once there are "rules" (wink wink), meaning the appropriate people are paid off, etc. then anything goes until someone's busted, in which case the paid off persons jettison themselves, and you are stuck with the blame anyhow. I'd rather be safe than sorry!
Admin
Three. Your two, and people who will seek a middle ground to get the best of both worlds. Over-engineered software is as hard to maintain as horrible copy-paste duplicated quickies.
Admin
I work on the other side of this divide. Some customers come up with requests which the company I work for doesn't want to do. However, niche market politics means never saying no so the company just puts a very high price tag on these changes. Sometimes the customer goes for it. I ended up as the developer on one two week job for which the company earned £100,000. I really must renegotiate my contract to get a cut of this sometimes.
Admin
...using your .Net product... now that's the real wtf
Admin
I wonder where the idea that Office 2007 should have its own color scheme (seperate from the windows scheme) came from...?
Admin
Please define "right", so we can continue this debate.
Suppose that the app were written for a single customer on spec, but rights to resell it were retained by the developer.
Suppose the app were written for a single customer on spec, THEN the developer realized it could be resold to others.
Also, I doubt the original customer would consider it "right" to pay for the coding effort to make "his" app customizable.
Admin
I thought so too.
Admin
Heh, the document automation software I use works like that.
SU=1 means I can edit precedents as well as use them.
Pretty much indicitave of the entire application.
Admin
Here's one of many little gems I've found in the rat's nest of an ERP suite I am babysitting:
...
//Add Freight GL to the G/L Distribution Summary If Freight_Branch = 'Waterloo' then GL_Used := '504101021-11'; If Freight_Branch = 'London' then GL_Used := '504101051-11'; If Freight_Branch = 'Markham' then GL_Used := '504101061-11'; If Freight_Branch = 'Windsor' then GL_Used := '504101071-11'; If Freight_Branch = 'Mississ' then GL_Used := '504101081-11'; If Freight_Branch = 'Halifax' then GL_Used := '504103031-11'; If Freight_Branch = 'Ottawa' then GL_Used := '50420401-11'; ...
Another one in the same application...
...
//Temporary change for Owen Sound If Orders.FieldByName('Rep_Location').AsString = 'Owen Sound' then Begin Rectangle(7.70,0.50,10.70,1.00); MoveTo(8.88,0.50); LineTo(8.88,1.00); MoveTo(9.80,0.50); LineTo(9.80,1.00); end Else Begin Rectangle(6.45,0.50,10.70,1.00); MoveTo(7.70,0.50); LineTo(7.70,1.00); MoveTo(8.88,0.50); LineTo(8.88,1.00); MoveTo(9.80,0.50); LineTo(9.80,1.00); end; SetFont('Arial',6); Bold := True; CRLF; YPos := 0.60; ...
Admin
Any coincidence in the company ID being 1337?
Admin
very nice
Addendum 2022-10-29 21:54: The most crucial step in any business is to personally conduct the necessary research and study testimonials from customers who have utilized various services. I constantly do this, and I think that's why I only ever utilize things that my employer mandates. I did a lot of study on customer service outsourcing before deciding that it is essential for the growth of my business. All customer requirements must be fulfilled as quickly and effectively as feasible. I was lacking precisely this.