Software Development Tips:
Here are some of my suggestions on
how to develop software.
1. Name your project
On the first day of the project, name your project. This tip was from a
book written by Digital Equipment Corporation (DEC). It keeps everyone
involved knowing what you are talking about and ensures that people
invited to your meetings know if they should attend. "Paper Tiger"
the document scanning project.
2. It cannot be changed
Once you have a customer base your system cannot be changed. This tip came from
one of the developers of the IBM TSO operating system. Realize that
anything you decide on, will become permanent, this includes logic,
processes, and conventions. The tip says, to be very careful when you
design a system, to known, that every decision right or wrong will
become impossible to change at some point in the future. The customer
base includes the system itself.
3. Separate the request from the action
This is the key to everything. If you do nothing else this
will reduce your effort, increase reliability, allow collaboration, and
permit change at any time. Make the request as easy to remember as
possible, and the action as specific to a give task as possible.
4. Isolate logic
An almost impossible task is to create a 100% isolation of logic.
Building a system requires constant changeability, this can only be
accomplished by ensuring that anything can be replaced in a minimum
amount of time and effort.
5. Do not use external accountability
The success of a project is having confidence in the work that is
being performed. The work therefore must in itself provide everyone with confidence at every stage
of the project. Accountability
systems like Agile are external which has overhead and provide no
assurance of success. The system you build must have built-in
accountability. External accountability is only as good as what a
person can accomplish manually.
"To improve is to change; to be perfect is to change often." --
"All change is not growth, as all movement is not forward." --
"In times of rapid change, experience could be your worst enemy."
-- J. Paul Getty
"When I was a kid my parents moved a lot, but I always found
them." -- Rodney Dangerfield
"It’s only because of their stupidity that they’re able to be so
sure of themselves." -- Franz Kafka
"Here’s all you have to know about men and women: women are crazy,
men are stupid. And the main reason women are crazy is that men are
stupid." -- George Carlin
"Men make history and not the other way around. In periods where
there is no leadership, society stands still. Progress occurs when
courageous, skillful leaders seize the opportunity to change things for
the better." -- Harry S Truman
"The fool doth think he is wise, but the wise man knows himself to
be a fool." -- William Shakespeare
"A day without sunshine is like, you know, night." -- Steve
6. Example are just examples
The examples you find in documentation are just examples.
Expect to rewrite every piece of code you find before you add it to your
7. Nothing is temporary
Every line of code, and every file, manage it as a permanent company
8. Do not become a Lemming
Know what it is your doing, without knowing mistakes are made. A
beaten path, especially in software development is probably the wrong
9. Never have versions
Design and write a finished product.
10. Nothing you do is permanent
The current technology is vapor ware. Nothing remains the same over
any length of time. You have to code for the lease common denominator.
You need to assume you are building a house out of ball bearing.
11. Read the latest documentation
Products come and go, products that were the latest thing last year may
no longer be supported. Many products are antiquated before they
12. Stay off the bleeding edge of technology
The startup of new technologies are littered with unfinished
solutions. You will be debugging someone else's product.
13. Never expect support for your development
Other companies will not support your development if it exploits or
competes with their products.
14. Never comment your code
Comments waste time and have no value to the program. Comments
for yourself are good, something you "have" to remember that is not
obvious in the code. Comments for someone else is just poorly done
documentation that has no value and waste time. The first thing I do
with someone else's code is to delete all the comments. The usefulness
of comments is just an assumption.
15. Never permit the user to test the product
The product you provide to the user should always be fully tested. This
is your job not his.
16. Old is a good thing
These is nothing worse than to think you can do better than the legacy
systems. Do not take credit for someone else's work. More color is not
an improvement. Using the same
tools do not expect to create a better system.
17. Do not
ask the user for his opinion
You can ask for his work details. You are the expert in software
development, if not then the project will fail.
18. Never reuse
Never make the assumption that any code will be reused for multiple
similar purposes. There are no true synonyms. Do not write
complexity for the sake of simplicity, it is counter productive.
19. Design for the greatest benefit to the company
As you design the software determine first a matrix for the benefit
to the company for each new capability. Keep your personal likes and
dislikes out of the equation. We all want to make a mark, but the best
thing you can accomplish is to be invisible.
20. Almost Never use API's
If you are writing a large system wrap all you system functions and
almost never use third party API's. Teach yourself how to program. Do
not rely on others to do what you should be doing.
21. Have no favorites
The "first love syndrome" is a powerful thing to overcome. Assume that
no one is better than you at programming. This means that there are no
sacred cows, and you will attack any problem as a professional using
whatever tools are best for the job.
22. Know when to walk away
Be brave, know that you are a professional and put the interest of
the company first. Know when the request exceeds your or
resources or ability.
23. Watch the user
Keep an eye on the users of your product. If the user moves from mouse
to keyboard a large number of times, then something is wrong.
24. Determine the simplest solution
I have been asked "When does this happen?" I always answer "you will
know". We rarely get to that solution in software
25. There is no such thing as maintenance
The product should be stable once delivered and never require fixes.
Enhancements should be non-existent unless they were contracted for from
26. All coding is the same
The tools that you are using are extremely limited with the only
difference is that they are different. All compilers do the same job so
code in a form that is acceptable to all environments. Basically stay
away from the so called "new and special syntax"
27. Software is not done by committee
You must be a dictator and control the complete development process.
The amateurs are just wasting your time. If you are letting others make
decisions, then you might be the wrong person for the job.
28. Everybody is an expert
The users are expert in their jobs. You must listen to the user and
never impose your personal likes or dislikes. But, you are changing
their world and not everyone wants to change. Actually, they just don't
like to hear beforehand that things will change. If you are good
nothing should really change for the user. You are simply providing
better information so they can do their jobs.
29. You only have 5 minutes
You have a five minutes window when you know exactly what to code, use
those minutes wisely.
30. Finish the job
Know when to wrap it up, and be confident that the software will never
31. If nothing else it should work
The product you deliver should never fail.
32. System Independent
Make your products browser, OS, and hardware independent. Most software
companies go out of business because they cannot keep up with change. A
product designed today, should work in 10, 25, 50, 100 years, and should
be moveable to any new type of environment.
33. It's just software
It is not a religion. What you write is the same as any other effort.
There are no software development gods. No one is an expert, otherwise
all software would be done.