Before a programmer can sit down and create a new application, she must understand the nature of the problem the application is designed to solve. Programming projects often begin with a relatively simple problem. These simply stated problems often mask a much more complicated issue. Rarely do programmers create applications for their own benefit. The users that need the application have a deeper understanding of the problem and may not provide sufficient detail in the initial problem statement. Therefore, the programmer must work closely with the application users to better understand the nature of the problem in order to design an application that solves the problem and fulfills the users' requirements (Farrell, 2008).

A billing system for a landscaping company is an example of a problem that seems straightforward. Most programmers have a moderate understanding of how basic landscaping businesses operate and what their billing needs might entail. For example, the application needs to calculate bills and mail them to the clients. Additionally, a billing system should be able to track incoming payments and apply them to the proper client account. Finally, a billing system should be able to track clients that have not paid on time and generate a new invoice. Therefore, each invoice should include a maximum payment interval and an associated late fee if that interval is exceeded.

The aforementioned requirements can be generally used to describe any billing system. In order to design a billing system that satisfies the needs of the landscaping company, the programmer must approach the company with a detailed list of questions to clarify the inputs and outputs the company requires (Kingsley-Hughes & Kingsley-Hughes, 2005). For example, the basic description of a billing system states that the company will be able to input how much a client owes. Most companies offer discounts or coupons to certain customers. Therefore, the programmer must understand what pricing variations the company will offer to customers and how they wish to track those variations within the billing system. Similarly, when payments are received from customers, the landscaping company will need to input those receipts into the billing system. There are various methods that can be utilized to input these receipts, but the landscaping must relay its requirements to the programmer.

Outputs from the billing system must be determined in the same manner. Although it is obvious that invoices will be generated for each customer, the landscaping company would need to make decisions regarding the format and delivery method of those invoices. Most companies want to receive reports regarding the status of the company's finances. These financial reports are an output that the billing system can be expected to generate. Again, the programmer can begin to create these reports without know what content the landscaping company wants to see and in what format they should be delivered.

References

Farrell, J. (2008). Programming logic and design, comprehensive (5th ed.). Boston: Thomson Course Technology.

Kingsley-Hughes, A. & Kingsley-Hughes, K. (2005). Beginning programming. Indianapolis: John Wiley & Sons.