July 2018
August 2018 Issue
Collins Software's Newsletter
Oct 2018
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." -- Winston Churchill

"All change is not growth, as all movement is not forward." -- Ellen Glasgow

"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 Martin


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 project.

7. Nothing is temporary
Every line of code, and every file, manage it as a permanent company asset.

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 path.

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 are completed.

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 code
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 their 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 development.

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 the start.

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 fail.

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.


Author: Clif Collins
Houston, Texas
August 1, 2018

email: web4@CollinsSoftware.com