Wednesday, January 16, 2008

Priorities

1. Make it necessary.

Don't do a project if it's not important and necessary. The basis of
all efficiency is not using resources when you can avoid using the
resources. If you can avoid doing the work, then don't do it.

2. Make it work.

First, get the thing working. Prove that it's possible. Demonstrate
that it's necessary. Build it as simple and as lightweight as
possible; as the Extreme Programming folks say, build the "Simplest
thing that could possibly work". Avoid using newfangled features if
they don't help.

3. Make it beautiful.

Refactor and re-organize to make it aesthetically attractive, and
understandable. Make it "fit in your head". Implement it using the
right layers; "do things at the highest layer possible", as Linus
Torvalds said at USENIX 1997 of the Linux kernel design philosophy.
But don't do them at any higher layer than is possible; i.e., don't
build a framework or containers when what you really need is actual
functionality and logic.

4. Make it efficient.

If necessary, speed it up and make it smaller. But you don't try to
squeeze everything; figure out what's taking the greatest share of the
time, or the greatest share of space, or the greatest share of
whatever you're short on (network bandwidth, end-user patience, etc.).
Then economize there. This seems obvious, but when you're trying to
make things lean, it's tempting to start working about using
java.lang.Integer instead of int when your slow part is the SOAP query.

--------------

(Is this even right?)

No comments: