Every developer wants to create great software that users can appreciate. Unfortunately, creating software that disappoints is easy. Conversely, creating high-quality software that users will appreciate is hard. Fortunately there are a number of things you can do and tools you can use to create high-quality software. This article will talk about those things that developers should know and tools they can use to create high-quality software.

It is easy to get wrapped up in the fun and creativity of building software. As a developer, there are days where you are “in the zone” writing code, and you look up to find that you just wrote hundreds of lines of code. Sometimes you are writing new features where the code is completely new. Other times it is refactoring an existing piece of code. In either case, you are eager to commit your code to source control because you want to share it with everyone. It is a demonstration of your creativity, of your abilities, of your value.

(Related: Microsoft open-sources .NET CLR)

At this point you should be concerned. Certainly I would have concerns if all I had done was write code. A developer that knows how to write high-quality code does not have these concerns. That is because they have taken steps to mitigate risks and to ensure quality. They have a process.

A software process includes phases such as planning, requirements/analysis, design, development, test/acceptance, and release/deployment. Examples of software processes include agile, waterfall, iterative and incremental development, test-driven development, and extreme programming.

It is important to decide on the process your team will follow early on. No matter what process you choose, the team needs to agree on it. The quality of your software can be correlated back to whether the process was followed or not. Some of the worst-run software projects never got agreement on the process early on. Teams that can self-organize and agree upon a process quickly are on the road to building high-quality software. These days I am finding that the teams I work with use an agile methodology with elements of iterative and incremental, test-driven development, and Extreme Programming.

No matter what process you pick, you need tools to help you follow the process. Such tools are often referred to as application life-cycle management (ALM) tools. There are many tools available, including comprehensive products like Visual Studio Team Foundation Server (TFS) from Microsoft, or suites of tools like those from Atlassian (JIRA, Bamboo, Clover and Confluence), or those from JetBrains (TeamCity, dotPeek, dotCover, ReSharper), or specific-use tools like Xamarin Test Cloud for mobile application testing, or Octopus Deploy for deployment. Teams that I work with mostly use TFS for requirements, work-item tracking and source control. We find that TFS is very useful since it has integration with Visual Studio that makes a developer’s life easier.

Know that you don’t need to stick with just one tool or suite of products. Depending on your budget, you may decide to buy multiple tools that overlap in functionality. Certain tools are better than others and may offer an advantage. For example, we use ReSharper for code analysis. It has an extensive set of rules to analyze your code, and then offers quick fixes to resolve code issues.

About Rich Crane

Rich Crane is Chief Architect and CTO of RedMetal, a private incubator and accelerator that grows ideas into products, companies and intellectual property. Rich has more than 25 years of software development experience, including 10 years at Microsoft. He authored "Essential Windows Communication Foundation" from Addison Wesley. He graduated Summa Cum Laude with a Bachelor’s degree in Electrical and Computer Engineering from Drexel University. You can follow him on twitter at @richcrane or follow his blog at wickedprogrammer.com.