

Very fast development, how to do it? - dublinclontarf

I'm not talking shoving a huge number of man hours at the project in the shortest time period possible. I mean what tools, strategies,or anything really that will cut application development time(and also the man hours put in).<p>Note:I'm asking this question with webapps in mind but something that would work with general development I think is also relevant.
======
stonemetal
A willingness to do it right the first time. I find any time I take on
"technical debt" it almost always bites me in the rear latter.

A good VCS and the ability to use it.

Spiral development with strict YAGNI. Do it right but don't over engineer.

Automated Tests. Not because I am all that big a fan of tests but because if
you write it to where it is easy to test it is often better designed. Code
that is written with everything you need to do to unit test is often written
with lower coupling and better cohesion because you are thinking about how to
take out this one little part to test.

------
10ren
The fastest coding is no coding. Some pre-programming thoughts:

Problems are easier to fix the earlier you find them. Try to define the
problem (get it clear in your head); try to define the solution. A minimal
product can help ( _does it solve the problem?_ _is it the problem real?_ ),
or mocking up a pretend solution (e.g. a manual backend, or no backend), even
on paper, or with a tool like balsamiq.

Can you solve the problem using an existing tool, perhaps by modifying the
problem to fit (constraining it, generalizing it, or transforming it)? This
can be embarassingly effective, esp if you have NIH syndrome and just want to
code.

Can you make the _cause_ of the problem go away? ie Doctor, my arm hurts when
I do this. _Don't do that._

Estimate times, by sub-dividing the tasks, then _doubling_ the estimates. Then
re-ask what is really essential. It can change the balance of what
alternatives are reasonable to consider. [x2 seems to account for one's
optimism. But confirm it for yourself: make some estimates and check what
happened.]

Reread _The Mythical-Man Month_. eg He suggests 1/6 of project time be
allocated to coding. (p.20, anniversary edition); the rest is planning (1/3)
and testing (1/2)

------
jaddison
Use a framework: Django. RoR.

Go minimalist (feature set) and release ASAP - no matter how crappy it is.
Having something released will force you to improve it quickly.

------
makecheck
Choose the best language for the job, because coding really slows down when
even the simplest things are awkward to express. Sometimes, this can be
handled by writing a simple tool or file format for code generation, as
opposed to using a new language. Make sure perl and python are both in your
toolbox.

While it's useful to spend _some_ time looking for existing solutions, don't
be afraid to build things. Your version will often be good enough, and quicker
to integrate than a 3rd party solution. Besides, you usually learn something
in the process, which will only make you better at coding, and speed up your
next project.

------
DennisP
Abstractions and code generation. Start by being completely intolerant of
repetitive code. Boilerplate must die. Closures can help a lot with this.

To whatever extent you can't abstract away, use code generation. Make your
generator insert code directly into your project files, maybe in between
comment tags. You want to be able to configure things with minimal code and
hit a button to get everything you need.

I'm experimenting with using emacs for this, but generally I've just built c#
projects to generate my c# code. On one project this had an unexpected
benefit: I realized I could change my generator from a compiler to an
interpreter, doing everything at runtime, and I got a very concise and
flexible data-driven project, with 1/3 the lines of code as a similar project
built by a contractor that had everything hardcoded.

Of course, know your language and libraries well. You don't want to be
googling for every little thing. To help learn the libraries, staged memory
software like anki or mnemosyne can be a big help.

Finally, get really good at a topnotch text editor. I'm about 8 months into
using Vim for everything (mainly via Viemu, a plugin for Visual Studio) and it
makes a huge difference. It's not just that I can edit faster, but that it
helps keep me in flow.

------
laxk
Automate all processes: assembly, releases, tests. If there is a process that
has to do every day - automates this. A good example of when you need to do
automation - delivery website for test and production server.

Also use modern frameworks like RoR, Grails, Django, Spring, etc

------
anactofgod
The number one thing you can do to develop the "correct" software quickly is
to choose a language at the proper level of abstraction and with the right
idioms to allow you to address your problem space.

If you are tackling a problem space where such a language doesn't already
exist, or one where the right idioms and level of abstraction is unknown to
you, then choose a language that permits you to easily discover and construct
the domain specific language that is required.

------
abdulhaq
The sooner you start typing the longer it takes to finish.

------
daleharvey
tests

once you are sure that you arent breaking something, the speed at which you
can code changes an order of magnitude.

the hard part is how to produce tests quickly

------
ippisl
productive django development:
[http://stackoverflow.com/questions/1852237/productive-
django...](http://stackoverflow.com/questions/1852237/productive-django-web-
development)

------
tszming
Release early. Release often. And listen to your customers.

~~~
coryl
This doesn't really help you with putting out code quicker/more efficiently.

