I believe in Agile software development. There are many ways to structure a project and still call it Agile. Most importantly, there has to be short feedback cycles throughout the system and adaptation to that information. However, most projects will benefit from many technical principles that are typical of Extreme Programming.
I believe in TDD. Test driving code clarifies the task at hand, and provides continuous confirmation that your code works in small parts. It allows you to refactor with confidence, and reshape your codebase throughout it’s life.
I believe in Continuous Integration. This implies a continuous integration server that run tests against integrated code. This also means avoiding patterns of reduced integration with other people, such as long lived code branches.
I believe in Pair Programming. The benefits are substantial. Pairing results in better developers, a better codebase, better thought out solutions, higher productivity, and a real team of people.
I believe in Empowered Teams. People who function as cogs in the machine cannot contribute to their fullest. Build a team, make them capable of their own decisions, support them, and let them perform.
I believe in Frequent Releases. Frequent releases results in smoother releases, and a greater dynamism to market or client needs.
I believe in being a General Technologist. Developers should not over-specialize to the point that they can’t deliver software without several other specialists. It’s better for most team members to understand and be proficient at in all areas of software delivery, with a few specialists being an added bonus to the quality and direction of the product.
I believe in Simplicity. Excessive complexity is too common in software development. While some complexity is unavoidable, I favor simpler solutions, simpler tools, and simpler products.
Above all, I believe in high quality, well crafted software.