Making Good Software

A blog by Alberto G (Alberto Gutierrez)

Written by Alberto Gutierrez

March 13th, 2010 at 1:36 pm

My ten development principles

with 20 comments

After several years developing software, I have acquired a very a strong opinion on how software should be developed, I actually have come to the conclusion that everything boils down to 10 principles, that if well implemented, will make any software development successful.

1.- Customer first.

“If we don’t take care of the customer… somebody else will.”

Customer first means focusing from a customer perspective on real value for the product being developed, other aspects as: contracts, requirements, technologies… should take a secondary role in the project.

Not focusing on the customer in one the top 5 five non technical mistakes made by programmers.

2.- Code quality.

Even though code quality is something very subjective, (all code is crap), it drives many important aspects as: how hard is to maintain the application or how hard is to take on board a new developer.

In my opinion, the main indicators for code quality are: simplicity, readability, robustness and testability. Other qualities as performance or extensibility, if not required, will over engineer your application.

3.- Empowerment.

People are the most valued resource in software development, not the technologies. They are the ones that make the difference between a mediocre product and an excellent product, but they need to be empowered

Empowerment is the process where people is encouraged to be proactive and take decisions. Some of the most effective mechanisms to empower are: coaching, pairing or delegating.

There is an excellent article from Tony Morgan explaining the difference between a classic delegation approach and empowerment.

empowerment

4.- Continuous integration.

Integration is, from my experience, a major issue in software development. Waiting to integrate at the end of the project or after a big chunk of functionality is completed, is always a traumatic process.

Continuous integration is the process that guarantees that every piece of code committed is automatically integrated in the system. Remember that continuous integration goes beyond continuous compilation.

This article from Martin Fowler, is one of the best references online about continuous integration.

5.- Iterations.

Iterations provide continuous feedback. Continuous feedback is important because it reduces the amount of uncertainty in software development.

While iterations are usually only related to agile methodologies, it is important to remember that there are other methodologies as RUP which also use iterations and they are not part of the agile family.

6.- Automated testing.

Allows refactoring and iterations, provides confidence and if well implemented, enhances the correctness of the final product. To automate tests you may consider some facts about testing and some advices on how to write a good test suite.

7.- Refactoring.

No matter how much care you put on coding, on your first attempt, you are going to be wrong. Refactoring is the practice by which we keep changing the code to meet the changes necessary to introduce in the system.

8.- Informal architecture.

Big design upfront (BDUF), unless you are NASA and can expend 50-60% percent of your project time on it, is a complete waste, but so it is coding without any preparation. Informal architecture is a compromise solution where architecture is discussed in an ongoing basics and is persisted in light documents, boards or similar.

9.- Communication.

Software development is ONLY about communication. The customer explains to the software development team what he wants to accomplish so that the software development team can explain it through code to a computer.

requirements-communication

10.- Avoid waste.

Waste accounts is one of the major productivity killers in software development: unnecesary meetings, unnecessary requirements, unnecesary process, unnecesary documentation, being some of the most common and dangerous.

20 Responses to 'My ten development principles'

Subscribe to comments with RSS or TrackBack to 'My ten development principles'.

  1. [...] My ten development principles First: customers [...]

  2. [...] a chance de algo não sair conforme o esperado é grande. Pensando nisso, me baseei no artigo do Alberto Gutierrez para criar esse checklist com algumas coisas que você deve fazer para ter uma boa [...]

  3. [...] My ten development principles | Making Good Software After several years developing software, I have acquired a very a strong opinion on how software should be developed, I actually have come to the conclusion that everything boils down to 10 principles, that if well implemented, will make any software development successful. (tags: development ten software) [...]

  4. “Not focusing on the customer in one the top 5 five non technical mistakes made by programmers.”

    I’m pretty sure another one of the top 5 non-technical mistakes that programmers make is not proof reading and not spell checking their blog entries before they post them…

    Nordwolf

    15 Mar 10 at 12:01 pm

  5. Fantastic post and great blog layout. Thanks!

  6. [...] My ten development principles | Making Good Software [...]

  7. [...] is DTAP? Arrogance is Limiting Framework Adoption Solar 1.0.0 Stable Released Alberto Gutierrez has posted an article where he list his ten most important principles that should be followed to ensure the success of a [...]

  8. [...] My ten development principles – “10 principles, that if well implemented, will make any software development successful.” [...]

  9. [...]  My ten development principles (0 visite) [...]

  10. [...] My ten development principles (Alberto Gutierrez) [...]

  11. Very well balanced, those ten principles I adopt them
    Xavier de Joybert

    de Joybert

    31 Mar 10 at 8:10 am

  12. [...] My ten development principles | Making Good Software (tags: tag) תגים: כללי [...]

  13. [...] 10 best practices for front-end web developers My ten development principles Is the Agile Community Being Unreasonable? Scrum Gathering Musings How I Review Code A Badge of [...]

  14. [...] My ten development principles – Alberto Gutierrez (Making Good Software); [...]

  15. [...] Making Good Software, compartido en su Google Reader por Javier Neira If you enjoyed this article please consider [...]

  16. avoiding waste and feature creep. until I really disciplined myself I used to spend a huge percentage of my time adding ‘cool features’ and mostly not because the client thought of them, I stupidly mentioned how great it would be if…

    Surrey Web Design

    29 May 10 at 3:21 pm

  17. [...] requirements, Software Development is all about inputs, outputs and actions. Previous post:« My ten development principles Next [...]

  18. [...] My ten development principles | Making Good Software [...]

  19. [...] Making Good Software, compartido en su Google Reader por Javier [...]

  20. [...] Text:Alberto GutierrezTranslation: agilitytranslation-LiChengHui var infolink_pid = 138755; var infolink_wsid = 4; [...]

Leave a Reply