views:

278

answers:

11

I have a horrible habit, actually something I'm wrestling with right this moment, when I think of a better way to do something - either a refactor, or something that would just be SO MUCH COOLER LOOKING, or such a better UX, I just HAVE to do it. Even when it would cost me time and I'm in a time crunch. I never know when to say, "no, there isn't time for this I can do it later."

Is there a line you draw?

Like right now I need a way to display magazine articles that are in the database. The easy way would be to create a new .aspx page and just pass the article id. the AWESOME way would be a jquery fade in modal that would display the article. At least that's what I think. Not being a guru it would take me longer to write. We are launching next week no time for extra crap. However, I just can't bring myself to do it the easy way.

Does anyone else run into this problem? Wondering if more experienced programmers have some wisdom to share.

+7  A: 

You're talking about "gold plating". It's a very common and well-known issue for software developers.

From the glorious founder of StackOverflow himself:

30: Developer gold-plating. Developers are fascinated by new technology and are sometimes anxious to try out new features of their language or environment or to create their own implementation of a slick feature they saw in another product--whether or not it's required in their product. The effort required to design, implement, test, document, and support features that are not required lengthens the schedule.

The proper way to cure this problem is to volunteer for so much work that you don't have time to do it right, let alone add on extra bells and whistles. :)

Edit: Other "classic mistakes" link here.

mwigdahl
+ Almost every real developer i know has this problem. Even the ones that do it for a living but don't care gravitate to this ideal as well. Nice quote, i noticed the 30: is there more of these? If(true) { post link; }
Ioxp
Yes, link added...
mwigdahl
Sorry i missed it my bad...
Ioxp
here is the link to all of them http://www.stevemcconnell.com/rdenum.htm
Ioxp
+1  A: 

I think it's just a matter of setting priorities. Also, if your client, or boss doesn't want you to do things the flashy way, and you don't really have time to do it the flashy way, just do it the simple way, and come back and upgrade to flashy if you have time later. Clients and bosses are usually happier when you finish the work they gave you before moving on to making things better.

David Morton
+9  A: 

I'd go the quick route first.

Write an ASPX page that is showing an article based on ID, or even cooler and more SEO-friendly, a slug. You'll be able to meet your deadline. Then, I'd start on the awesome jQuery way.

The bonus to this is that you'll have a fallback option, in case that a user has JavaScript disabled.

Srdjan Pejic
am I dumb that I don't know what a slug is?
Sara Chipps
I know what a slug is, but I don't know what little slimy creatures have to do with web programming...
Michael Myers
A slug is a typesetting term for a placeholder. This is a good answer, BTW. You're probably going to need the ASPX for the popup anyway. And a fallback for non-JS is good.
Craig Stuntz
A slug is a non-numeric unique identifier.So, instead of accessing the article like this: www.magazine.com/article/1, you can do this www.magazine.com/article/why-i-am-so-great
Srdjan Pejic
awesome, thanks. However, I am implementing URL rewriting... maybe this is a great time to start using it.
Sara Chipps
A: 

Sounds like typical feature creep. Convince yourself that tabling a feature idea now to meet a deadline is quite different from simply dropping the feature altogether. You can come back to it months after release and put in new features.

Brian Ensink
+1  A: 

I look at how much time I have left, and if I feel I am pressed, I don't venture outside of my area of expertise. I am all for doing it correctly and elegantly, but the reality is that the majority of the time the deadline takes precedence, and I know if I stay within my comfortzone when pressed, I will most likely make fewer errors which means I save the QA people time in testing things.

That all being said, I have been known on more than one occasion to push the limits of how much can be done. If you aren't working an immense amount of overtime already, you can always make extra the time necessary for going the harder route. Yeah doing this can cause a little more work for extra people but sometimes that's the difference between having the best application or having the first loser.

My other advice is don't try and do both options. If you create a basic version stick with it and move on. If you try and do both, you're really wasting time in the end.

Kevin
A: 

I think you've pretty much answered your own question there. You said that adding this feature would take too much time, and you're in a time crunch and are launching next week. I think it's fairly obvious you need to go the "easy" route.

You're basically describing feature creep. http://en.wikipedia.org/wiki/Featuritis

You need to discipline yourself, what I would do in your position is document the new feature I want to add, and implement it after your out of crunch mode when you have time to work on it. You're obviously aware that adding this feature is going to cost you time and may very well set back the launch of this product, you just need to have the discipline to prioritize and stick with it.

CalvinR
A: 

I think every developer has this problem if he is interested in programming and isn't coding just as a way to make money in a 9 to 5 office job.

Here is my advice: Make a list of every cool thing you think of as you're writing the code. After you have a working basic version, commit it to your source repository.

Now if you have time left go back and do as many cool things as you have time for. Use branch tags if you're going to have to seriously rework the code.

Once you run out of time, if you're doing Agile, write the leftovers up as stories and give them to your project manager or client.

Zan Lynx
A: 

I think when you say you are doing something the "right way" that implies a balance of quality with the speed you can write it in.

If you make something as high quality as possible, but never release it, it's not the "right way". On the other hand, if you write crap but get it out super fast, that's also not the "right way." To do something the "right way", you must balance these two.

An economic phrase that comes to mind is "Quality, Price, or Production Speed, pick two."

samoz
+1  A: 

The right way is to have it functioning so that users can get to the information they seek. The designer way is to have it kind of working but also have javascript light things up and move around.

The best way is to get it working correctly then revise it. There shouldn't be much refactoring involved if you know where to place things. Obviously retrieving the article is going to be business/app logic and the actual fancy design (like fades/animation) will be part of the design/view aspect of the setup. These portions should be able to sit and be somewhat ignorant of what the other is doing - they shouldn't be tightly coupled.

Syntax
A: 

Things like this used to absolutely kill me!

Here's my advice:

  • Do it the easy way (the aspx with the id parameter)
  • Write a small proof of concept to show the client

Show the client the working page and the proof of concept later along with an estimate on how long it will take. The experience of designing the prototype will give you a better idea of what is involved, how to do it, and how long it will really take. The proof of concept can also inform maintainence developers what's what (fading vs logic), and allow them to issolate if the fading mechanism or logic is broken.

Personally, I would stay away from the fading thing. In my experience the client will see no added value in the fading functionality and IMHO seperating it to another page will be easier to maintain. I believe it will be less prone to bugs later since code for the 2 pages will not be intermixed onto one page (if I understood you correctly).

John MacIntyre
A: 

In test driven development approach, when you implement a feature by writing a test for it and implementing it the easiest possible way, you will be able to go back and do it "right" only when you find really need to do so. Knowing this allows you to avoid overdesign. And often, you find you won't need to after all.

Joe Soul-bringer