Rainbow Shoes

My rant, my banter, my cynical view, my loving words.

Wednesday, March 28, 2007

Not my invention, from brainbox.com.au, which i thought is interesting:
  1. Object orientation is much harder than you think
  2. The difficult part of software development is communication
  3. Learn to say no
  4. If everything is equally important, then nothing is important
  5. Don’t over-think a problem
  6. Dive really deep into something, but don’t get hung up
  7. Learn about the other parts of the software development machine
  8. Your colleagues are your best teachers
  9. It all comes down to working software
  10. Some people are assholes

After 30 Years
1. Complexity
Design the system for flexibility right from the start. Divide the system into smaller subsystems, so that each one is naturally simpler. Resist the urge to add new features, and consider removing those that are not needed. Use tools designed to help you more fully understand the structure of a software system. Budget sufficient time to learn about the software before making changes. When faced with an over-complex system, redesign parts of it as necessary.

2. Technology Dependencies
Avoid technology sold by just a single vendor and which has relatively few other customers. Widely used technology is more likely to be supported and to have its defects removed. Avoid obsure features of any technology. Balance the benefits of your use of third-party technology with the risks of problems. Create prototypes to try out the technology you will be using.

3. Requirements
Understand the application domain so you can communicate effectively with clients and users. Follow a good requirements gathering and analysis process. Prototype to get an early view of potential problems. Continually interact with users and clients to keep up to date on their needs. Design with change in mind.

4. Skills
Make sure software engineers have sufficient general education, plus training in the technology being used. Make sure they have sufficient experience by "practising" on prototypes or systems that are of lesser importance. Put a mentoring system in place so that software engineers can effectively learn from others.

5. Change
Design for flexibility to accommodate potential changes. Stay aware of things that may change. Adjust the requirements or design as soon as important changes are discovered. Avoid changing too much too frequently.

6. Deterioration of Design
Build flexibility and other aspects of maintainability into the software from the start so that changes are easier to make. Ensure software engineers have sufficient training. Ensure changes are not rushed. Perform quality assurance activities on each change.

7. Political Issues
Participate in promoting and marketing the project. Enhance your negotiating skills and other "people" skills. Regularly evaluate how the system will impact all the stakeholders, and work closely with them to foster increased understanding of the problems.

0 Comments:

Post a Comment

<< Home