The purpose of this blog series is to introduce a new software engineering approach. The blogs in this series discuss the differences between the current traditional SDLC approach and new software engineering approach. It starts with the fundamental differences in desired results. The traditional SDLC approach seeks to meet customer requirements on time and within budget. The new Organic Software Engineering Approach seeks the customer and business alignments that will propel the business through the realization of innovative, high quality systems that achieve business purpose and satisfy the customers.
In order to achieve business alignment, the project system must be designed for high levels of interactions with customers and users. Instead of the single objective of meeting scheduling and budget commitments, projects can opt for quality objectives like business purpose, system performance, satisfaction, and of course project commitments. For example, business purpose means the achievement of mission, purpose, values, vision, goals and objectives.
The onus of the requirements and objectives are on both the customer and the project. The challenges are inventing the right system requirements; using an effective evolutionary development system that provides the feedback that supports organizational learning, and joint optimization of effectiveness, quality, and efficiency. From a human resource perspective, there is the need for a professional model. Extensive collaboration with customer, managers, and users require both generalists and specialists with human, social, conceptual, business and technical skills. Employee loyalty, managing careers, training, and career development are the main challenges for these socio-technical organizations.
People versus Process
This blog deals with the people versus process issues. Business alignment requires a complete rethinking of the behavioral aspects of software engineering. A rethinking is required because business alignment requires both a focus on people and business environment interface processes. It also requires software generalists with knowledge of the application domain. Many intuitively know that improving software engineering is about people but a body of knowledge is lacking. Nothing has changed Since Gerald Weinberg wrote “The Psychology of Computer Programming” in 197. This blogs details why and how people are so important to software engineering.
A New Software Engineering Philosophy
The first step in improving software engineering is to change the software engineering philosophy including the identification of the right desired results. With the traditional software development practices, the implicit desired result is to implement requirements on time and within budget. However, business customers want the developers to focus on customer value, business purpose, innovation, creativity, quality and effectiveness. The desired result should be the maximization of customer value through the joint optimization of effectiveness, efficiency, and quality. This requires a new philosophical and strategic approach that alters our perception, belief systems, paradigm, mental model, behaviors and practices.
The changes in a project's desired results will increase quality, innovation, business value, and productivity and massively stimulate the economy. Although American companies cannot compete from low labor costs, we can compete on the basis of better quality, time to market, localization, flexibility, adaptability, innovation, agility, and quality. The global winners will be the businesses and governments that replace the underlying mechanistic paradigm with a system paradigm that will facilitate the support the reorganization, redesign, reinvention, and reengineering of their institutions.
The world has become asymmetrical and the new global reality often no longer fit the current causal, linear, operational, and symmetrical realities associated with linear thinking. The new realities of complex adaptive systems include not only software engineering, but our education, healthcare, and many other systems. In order to survive these organizations must evolve from reductionist, machine thinking to relational, organic, thinking.
This blog presents how organic software engineering technology can save government and business organizations billions of dollars in software development costs. This report is about reducing software development costs by a factor of ten using the new software engineering approach. Imagine the impact of major increases in customer value derived from software systems and at 10% of the current costs. In order to achieve our cost reduction goals, the blog addresses four high cost areas: software rework, excessive functionality, software complexity, and low staff productivity. Other major contributors to high software costs such as inaccurate software estimates, excessive schedule slippage, and cost overruns are addressed in separate blogs. A hypothetical $20 million project is used to explain how reductions in rework and excessive functionality and increases in project efficiency and staff productivity will decrease costs to around $2 million
This blog presents software engineering solutions that reduce the incentives for offshore development. Alignment of the systems with the business requires a new organic software engineering approach that is designed to improve business innovation, quality, business value, productivity, and satisfaction. At the same time, project must achieve efficiency and commitments goal like significantly reducing software costs and gaining the ability to virtually always meet schedules and budgets. The achievement of business effectiveness, project efficiency and software quality goals require a “face to face and eye to eye” level of coordination, collaboration, communication, and cooperation with the business customer. This is something that offshore companies cannot feasibly provide. With such efficiency, quality and effectiveness benefits, American companies will have no incentive to send American jobs offshore. Millions of jobs will stay home!
This blog is about software project estimating using a history-based software estimating technology called project specific modeling. In project specific modeling, each project can develop its own particular estimating equation, relational models, and profiles. The difference between project specific modeling and generic costs modeling is the accuracy of the estimates. Project specific modeling use internal history data for estimating while the generic cost models use empirical data. In project specific modeling estimators use a history database that allows estimators to “listening” to their own data” and create an estimating equation for that particular project instead of using a single equation that is supposed to accurately estimate all software projects, past, present and future.
This blog presents an organic software project management. Project managers need to constantly assess what is out of balance, what is functioning effectively, and then make decisions regarding where and how to deploy the time, attention, resources, and energy needed to restore the balance. Trend analysis is essential. The purpose of trend analysis is to quickly identify potential problems and make the mid-course corrections before project system objectives are put at risk. There is a need for an early warning system that identifies when the project is becoming problematic so that the project team can take actions to restore the balance. The solution is to create a set of role model projects that become the basis for the quantitative models that guide the project team towards project success.