views:

182

answers:

7

I client of mines do not care about elegant and well structured code. I am writing the applications from scratch with minimal 3rd party tools. I am using l2s, Recatcha, tinymce, lucene, and structure map.

I would like to quickly get the clients product to the market as fast as possible while sacrificing elegant code. Are there any tools out there that will enable me to rush the product to the market?

+4  A: 

Good code is for you and not your client.

I don't think there exists such a magic pill.

But I would rather recommend you checkout Joel's 12 Steps to Better Code. Not all principles may apply to you (if you are not working with at least a certain number of people) but things like version control, how you deal with bugs, testing and others will help more than what you think.

Ashish
Don't like Joels steps. They are too targeted to one style of requirement and its not generic as they look. One of the think is that speak for many programmers working on very big project together at the same time.
Aristos
@Aristos: Some of the other stuff like version control and testing is important though even though you are not working with a lot of people. I've made an edit.
Ashish
I strongly agree that the "good code is for you".
Aristos
+7  A: 

No client ever cares about elegant and well structured code. That's not why you write elegant and well structured code. You write it because it's shorter, simpler, it's faster to write, contains fewer bugs and it is easier to find those bugs.

ADD: I know what I wrote above sounds contradictory. When I started working, I didn't believe that either. I had to learn the hard way. So to make the point clearer: This is what typically happens when you don't try to write elegant, well structured code:

  • You'll introduce subtle bugs that lead to weird, unreproducible behavior and take 10 times more time to find than writing the code in the first place
  • You'll solve the same problem multiple times. Or, the other way round: The elegant solution would have solved a set of problems while the ugly solution will only solve one problem. Or part of one problem.
  • You'll repeat yourself a lot. That means more code to write, more code to maintain, more bugs.
  • You'll write code that you don't understand a week later. So instead of adding new features/solving bugs you'll waste your time trying to figure out why some piece of code works (or doesn't work)
  • You'll solve the wrong problems. This is by far the worst danger, and it happens too often if you try to save the time you need to plan the thing properly.
nikie
exactly. when it comes to the technical details, YOU are the expert not the client.
tenfour
+2  A: 

Bit of a cliché, but there are no tools that can get you the result you're looking for, only people. For that matter, there are no tools that can guarantee you robust, reliable, well-designed and appealing products that people will actually want to use – those are all problems that can only be tackled by meatware. Respectfully, I'd be careful about the whole concept of "rushing a product to market", if I were you: I'm sure you have your reasons for taking that approach, but more haste really does often make for less speed, and less desirable results.

Rachel
+3  A: 

Assuming that adding more team members is not an option, you can either:

  1. work longer hours (live of coffee and pizza until either you or the project is finished)
  2. defer some features for version 2.
  3. sacrifice quality.
  4. deliver late.

the choice is yours but option 2 would be my recommendation. A program with fewer features that works is better than a feature laden product that can't be relied on.

Noel Walters
+2  A: 

When you don't have time to build a product to reasonable standards then it's important to know which parts you can cut corners on and which you can't.

The most important thing to get right is the interfaces between components. Make sure that they are correct and that coupling between components is as little as you can make it.

If for example you have a report generator that sometimes crashes, occasionally generates the wrong results, and has missing and broken features you can repair it later on when you do have time, or even scrap the whole module and do it properly.

If you've hacked the interface though, and it relies on other components storing their data in certain ways, or relies on the internal workings of other modules it becomes significantly harder to rip it out and replace it cleanly.

Don't skimp on the design of the high level modules and the interfaces between them. Keep asking yourself if I have to rip out this module and do it a different way, will it affect any of my other modules... The answer should as much as possible be know. it's "easy" to go and fix code, but not if it's all one big tangled mess. The small compoents don't need to be good as long as you can replace them easily later.

Obligatory comment - I'm not suggesting anyone writes bad code of course. Just that sometimes there are essential business requirements that make deadlines such that you can't do a good job of everything, and it is an important skill to know which things you can fix up later and which you can't.

So anyway to answer your question design tools such as UML drawing tools etc are probably more use than coding tools

John Burton
A: 

I would recommend using a continuous integration tool such as CruiseControl.NET or hudson and writing many JUnit tests (or the C# equivalent).

This way even if you develop quickly and don't spend enough time working out all the pieces, the CI server should prevent you from producing bugs which will take you an extremely long time to find.

That said, I agree with what the others stated, you write elegant code so you (or your teammates) will understand it and not so your client is satisfied.

Asaf
+2  A: 
XIII