Saturday, April 30, 2005

LSD Lean Software Development

A more recent contribution to the agile community is Lean Software Development, with focus on increasing delivery speed, producing high-quality software, and lowering production cost.
Becoming 'lean' is a process of eliminating waste with the goal of creating value.
'Waste' in software development: partially done work (inventory), excess processes, unneeded features, defects, rework, ..., all activities that do not pay themselves in reduced effort elsewhere.

Two mindsets: (ref. Joel Cutcher-Gershenfeld - ESD.60 Lean/Six Sigma Systems, LFM, MIT)
Producer "push"Customer "pull"
Movement of materialFlow of value
High volumeFlexible response
Expert drivenKnowledge driven
Periodic adjustmentsContinuous Improvement

Apply these mindsets to software development and you see the traditional waterfall development and the agile developments.

Lean thinking emerged in corporate literature in the mid nineties:
Womack, James P. and Daniel T.Jones, Lean Thinking - Banish Waste and Create Wealth in Your Corporation, Simon & Schuster (1996)

and the major work on Lean Software Development is established by Mary and Tom Poppendieck. Find a good LSD overview on their website.

Quality, Speed, and Low Cost are tightly linked. (Lean Six Sigma Principle)

Tuesday, April 26, 2005

What is Software Quality ?

Definitions of Quality:

(IEEE 610.12-1990) Standard Glossary of Software Engineering Terminology:
"the degree to which a system. component, or process meets (1) specified requirements, and (2) customer or user needs or expectations"
(ISO 9003-3-1991) Guidelines for the application of ISO 9001 to the Development, Supply and Maintenance of Software:
"the totality of features and characteristics of a product or service that bear on its ability to satisfy specified or implied needs"
Meeting customer needs is key in these definitions. But only with adequate quality assurance techniques quality can give you a competitive advantage.

One could argue that "the quality of your software makes your customers happy" or "the customers define the quality of your software" ? For the latter, throwing a lot of testing at the product can improve your external quality to an extend that it is satisfactory for you customers, however at a significant cost.

Testing shows you the (lack of) external quality: correctness, efficiency, reliability. External quality displays the visible symptons when there are issues, but the roots are invisible internal quality attributes: program structure, complexity, coupling, testability, reusability, readability, maintainability, ...

A nice metaphore is the Software Quality Iceberg (Code Complete, Steve McConell)

Software Quality Assurance (SQA) is the set of methods used to improve internal and external qualities. SQA aims at preventing, identifying and removing defects throughout the development cycle as early as possible, as such reducing test(!) and maintenance costs.