Please note: this blog has been migrated to a new location at https://jakesgordon.com. All new writing will be published over there, existing content has been left here for reference, but will no longer be updated (as of Nov 2023)

Development Values

Wed, May 14, 2014

A couple of years ago, with the help of a co-worker, I put together a high level list of “Development Values and Principles” for LiquidPlanner. I was re-reading them today and thought they were well worth sharing…

Values

Principles

YAGNI, KISS, and DRY - in that order

In addition, try to keep the following principles in mind:

… but avoid over-engineering

Test Driven Development

NOTE: we take a sensible middle ground in the recent TDD debate by simply assuming the final ‘D’ is for ‘Development’ instead of ‘Design’ - a healthy test-suite is useful for many reasons, guiding design is just one small part of TDD.

We highly value automated testing.

Refactoring is the most important way to ensure long term code maintainability:

“Just because it works, doesn’t mean its finished”

Broken Windows

Always keep in mind the broken windows theory.

Sloppy, complex, code is viral, when other developers work on that code base they will have a tendency to fit into their surroundings because they cannot be sure that there wasn’t some reason for that peculiar implementation.

Having a great automated test suite gives developers a sense of trust and enables them to fix the broken windows, knowing the tests will inform them if they have inadvertently changed behavior.

“If you see a broken window - fix it!”

Software Craftsmanship vs Engineering

Start to think of yourself as a software craftsman instead of software engineer. The value you provide is measured by the quality of your craft, and NOT the quantity, or the speed of development, or predicting the future.

Encourage personal growth and pride in being a better programmer

Final Words…

…from the best comic on the web

obligatory XKCD comic