Category Archives: Design


Project Communication

Many software projects fail to deliver on-time and on-budget and a factor in that is normally inefficient project communication. Studies have shown that software teams that consistently deliver on-time and on-budget communicate in an effective manner. These teams stay in contact constantly, but wisely use each other’s time during the communication process and are careful not to waste other people’s time. Below are some tips for enhancing project communication when working in software development projects:

Web Design Goals

Working with legacy software systems provides its own considerations, but there are some general goals that can be stated for web-based software applications. To the degree that the nature of system upgrades substantially touches these areas of system design, it is important to consider the following goals within the system design. Well designed applications should meet the following goals in order to provide lasting value:

Thoughts on Extreme Programming

A popular trend in systems development circles is the so-called Extreme Programming Paradigm. XP has proven to be quite effective at rapidly producing system functionality, and it includes many practices that should be considered by any development team (e.g., Test Driven Development or TDD). However, there are many pitfalls to XP that don’t necessarily make it the best technique for many organizations. Extreme Programming is a technique that is used to much profit by many organizations today. In contrast to the more “rigid” documentation guidelines outlined above, Extreme Programming is characterized by a much more streamlined time-bounded development process. Typically developers work in teams and communicate directly with the stakeholders. They then choose a part of the problem to focus on and develop something in a fixed amount of time; to the degree that features cannot be accommodated within the stated time frame (often weekly, sometimes monthly), these features are ignored in order to have something to show. The stakeholders then inspect the result and suggest modifications or improvements to the developers who continue with the process until the stakeholders are satisfied. While this can be very effective at showing progress in the short-term, it suffers from a lack of long-term memory. Over time, stakeholders change or original goals were forgotten. Extreme Programming is best suited for ephemeral projects, such as a consumer-facing website, that often don’t have a lifetime beyond several months. It is inappropriate for corporate development of mission critical systems that have complicated requirements and whose stakeholders can change over time. Successful corporate development efforts borrow the best practices from Extreme Programming, such as Test Driven Design and Pair Programming along with the most useful of the Waterfall design practices, such as the reliance on use cases and functional specifications, to create lasting products.

Managing large projects

Of paramount concern in managing large development efforts is the need to ensure that the application remains relevant and maintainable and can be kept up-to-date with the requirements of the rest of the organization. The danger of a long running project managed by a limited pool of developers is that the original requirements and goals of the system can be lost in the face of multiple enhancements. This can lead to a system that is arcane, does not reflect the actual needs of the department, and (most importantly) is over-reliant on the internal knowledge of the development team. This poses a substantial risk to the business that relies on the system for day-to-day operation. Fortunately there is a long standing body of Industry Best Practices that have been used to successfully manage the lifecycle of large-scoped projects. h3. Industry Best Practices The principal means of managing large software projects is to ensure that the problem domain and the software system are well understood. In a corporate sense, this means that the workflow, project history, system concept, design and implementation are fully documented and kept up-to-date throughout the product lifecycle. Such practice requires diligent management, as it is in the nature of people and organizations to lapse into ad-hoc knowledge and provincialism.