Software Development Services

Hazen Hills Software believes strongly that quality software can be produced only through competent, complete and careful analysis of the problem. Without the three-Cs, buggy, incomplete software will be the end result.

We employ a comprehensive development plan for all projects, large or small. Every project differs in complexity and context, but below is a rough outline of the steps we use when developing quality software.

Requirements Planning

Everyone is busy. In order for us to learn the problems we're asked to solve we have to have access to the resources that can provide such knowledge. In most cases, these resources are people who have busy schedules. Planning when we can meet with these people is essential to efficient learning.

Quality Assurance Planning

Every step of the development process needs Quality Assurance to ensure delivery of a successful project. Q/A can be as simple as source control, documented processes like change requests, and a detailed test plan for all stages of development. Sadly, this step gets skipped the most often in most development projects which often leads to wasted efforts.

Requirements Gathering

A clear, well-written requirements document is the foundation of any project. Requirements gathering provides us the opportunity to learn about the problem. It also gives our client the opportunity to look at the problem on paper and begin to think about how much of the problem they want us to solve.

Preliminary Work Estimate and Work Planning

We should have a pretty good feel for the size of the project after initial requirements gathering. At this point we can create our work estimate. An estimate at this early stage will usually have a high level of uncertainty associated with it. As we move further through the project and solidify the requirements this estimate is refined and the degree of uncertainty is always reduced.

Cost Benefit

Business is about making money. Although it may seem like the best solution, sometimes developing software may not be the most cost-effective solution for the client. Since we've completed a preliminary work estimate on the project we have a broad idea about how much development and maintenance of the solution will cost. It's at this point that the client should determine their cost of doing business and compare it to the potential cost of the project.

Requirements Analysis and Specifications

Earlier we will have gathered all the requirements for the project. At this point we begin to refine that list and eliminate the items that are unwanted or too expensive to implement. We begin to form a list of specifications of our end-product. We also gain from this step a feature list from which we can begin writing a user manual, if one is desired.

Preliminary Architecture

Many choices are available for implementing solutions. We have to decide which choice is best for the problem. It's here that we decide what development platforms provide the efficient solution. Generally we try to fit the solution into areas of knowledge that we specialize in, but there are cases where one or more of these technologies aren't sufficient. In these cases we can sub-contract the work, or the client can find another specialist to work with us.

Detailed Work Estimate

At this point we now have a very good idea about what features our end product will support. We can form a more detailed work estimate out of the original work estimate. This estimate should more accurately predict the overall cost of the project. As we go from here we will continue to review and refine the estimate and work plan to use as a guide. Regular updates to the project plan and estimate are provided to the client.

Detailed Architecture

We must review, at this point, the architecture we chose earlier to make sure it will, in fact, be an effective solution.

Design

Design and implementation go hand in hand. Before any particular part of a solution is implemented its role in the overall project should be designed and documented. At this stage we will also prototype components and interfaces. When its final role is determined and the part itself has been designed we can begin implementation.

Implementation

This is where it all seems to come together and we start to see forms, web pages, reports and the rest. When done correctly in the beginning it's amazing how fast implementation can go!

Testing and Debugging

Along with implementation testing should be taking place on any finished component. We're a small company so we don't have an in-house testing department but if so desired we can sub-contract testers. Often the client produces people to test. But, if possible, professional testers are worth their weight in gold.

Project Review

Once it's all finished we can do a project review with the customer. Here we determine if things went wrong, why certain parts had to be eliminated, what the total cost was versus the estimated cost, etc. We both learn from this stage.