Core Principles
Software engineering is guided by a collection of core principles that help in the application of a meaningful software process and the execution of effective software engineering methods. At the process level, core principles establish a philosophical foundation that guides a software team as it performs framework and umbrella activities, navigates the process flow, and produces a set of software engineering work products. At the level of practice, core principles establish a collection of values and rules that serve as a guide as you analyze a problem, design a solution, implement and test the solution, and ultimately deploy the software in the user community.
I identified a set of general principles that span the software engineering process and practice:
- Provide value to end-users
- Keep it simple
- Maintain the vision (of the product and the project)
- Recognize that others consume (and must understand) "what you produce
- Be open to the future
- Plan ahead fox reuse
- Think!
Principles That Guide Process
Regardless of whether a model is linear or iterative, prescriptive, or agile, it can be characterized using the generic process framework that is applicable for all process models. The following set of core principles can be applied to the framework, and by extension, to every software process.
Principle 1. Be agile. Whether the process model you choose is prescriptive or agile, the basic tenets of agile development should govern your approach. Every aspect of the work you do should emphasize economy of action- keep your technical approach as simple as possible, keep the work products you produce as concise as possible, and make decisions locally whenever possible.
Principle 2. Focus on quality at every step. The exit condition for every process activity, action, and the task should focus on the quality of the work product that has been produced.
Principle 3. Be ready to adapt. The process is not a religious experience, and dogma has no place in it. When necessary, adapt your approach to constraints imposed by the problem, the people, and the project itself.
Principle 4. Build an effective team. Software engineering processes and practices are important, but the bottom line is people. Build a self-organizing team that has mutual trust and respect.
Principle 5. Establish mechanisms for communication and coordination. Projects fail because important information falls in the cracks and/or stakeholders fail to coordinate their efforts to create a successful end product. These are management issues and they must be addressed.
Principle 6. Manage change. The approach may be either formal or informal, but mechanisms must be established to manage the way changes are requested, assessed, approved, and implemented.
Principle 7. Assess risk. Lots of things can go wrong as the software is being developed. It's essential that you establish contingency plans.
Principle 8. Create work products that provide value fo. others. Create only those work products that provide value for other process activities, actions, or tasks. Every work product that is produced as part of software engineering practice will be passed on to someone else. A list of required functions and features will be passed along to the person (people) who will develop a design, the design will be passed along to those who generate code, and so on. Be sure that the work product imparts the necessary information without ambiguity or omission.
0 Comments