No matter what field of business you are in intelligent software engineering is essential to the success of any sizable software development project. Poor software engineering is also the number one reason software projects fail. This is why we consider software engineering our most important service.
Software projects usually fail due to one of two reasons. Either too little attention to software engineering or over engineering. In either case the result is the same. Losses in time and money and often a complete failure to produce results.
Two areas of software engineering that can make or brake large software projects are specification and design. At Cauldron Development LLC we provide a practical balance of software specification and design. We realize that over engineering can be as big of a disaster as none at all. Knowing where to stop is an art form developed only through experience.
A software specification is a contact between the software consumers and the software producers. Software specification is also a nasty word some people learn by working at large companies that will remain unnamed.
With out software specification the natural imperfections of human communication will produce very different interpretations of the final product.
Creating clear software specifications is an important part of our software development process. We often make a software specification part of our contracting agreements. This assures us that we are producing what our customers really want.
Used incorrectly software specification can be a scary thing. Software specifications hundreds of pages long which take many hours to write and many more to understand cause more harm than help. This is why we emphasize practical software specification. Our software specifications are specifically tailored to each project and aim to specify the most important aspects with out drowning the meaning and over restricting the design in an excess details.
Whether software developers know it or not they make design decisions either up front or while programming. Writing code is a time intensive task. Making major changes at the coding stage, although sometime necessary, is expensive. By doing the majority of the design work ahead of time many more options can be evaluated quickly resulting in better software construction.
The inexperienced tend to think that designing is a waste of time because it means they are not writing code.
A change in design during the coding process may invalidate thousands of lines of code. At this stage programmers and managers often opt for a lower quality design rather than throw away hours of work. Sometimes throwing away code or refactoring is a necessary evil of software development. However, it can often be avoided through good design practices.