Adaptive Systems Development
James A. Highsmith III. 2000. New York: Dorset House Publishing Co. 358 pages. (CSQE Body of Knowledge areas: Software Processes, Software Project Management)
Reviewed by Pieter Botman
It was surprising and pleasing, upon scanning the list of references in this book, to come across several references to Peter Senges benchmark work, The Fifth Discipline. James Highsmith does more than pay lip service to Senges ideas. He makes a point of restating Senges principlesthe disciplines operating in a learning organization. Ironic as it may seem, in the software field it is rare that any reference is made to these principles, since they are somewhat high level, abstract, and management oriented. Highsmith describes the adaptive software organization, and his guidelines and frameworks are consistent with Senges principles. This consistency is appealing and thought-provoking, since software organizations might be one of the purest manifestations of learning organizations.
This book is aimed at project teams faced with high speed and high change environments. In the first portion of the book, the author devotes a fair amount of space to setting the tableexplaining the motivation for a more dynamic approach to software development. Not many readers will disagree with the author in his criticism of overly prescriptive, overly bureaucratic, and inflexible software development processes (dubbed monumental software development).
The second portion of the book describes an adaptive approach or management model, where the thrust is to break down bureaucratic barriers, to reduce process, and to facilitate collaboration and learning. This discussion is sweeping and covers practices at both the project and organizational levels. One major thrust of the author is the focus on results, and the rigorous management of components, not process artifacts. He also addresses concerns about scaling up rapid and flexible development environments:
...as project size increases...defining and monitoring component dependencies becomes a critical management issue.... Project Managers should carefully identify dependencies, establish adequate monitoring processes, and improve their problem-anticipation skills.
The authors vision for an adaptive organization in this book is driven not only by the need for rapid development, but also for reducing large-scale waste of time and energy. He has the early stages of development clearly in his sights, as he attacks overly formal requirements documents, excessive detailed project planning, and prescriptive methodologies (which focus on the how and not the what).
Highsmith discusses quality in an almost philosophical manner. He notes that quality does not consist solely of measured characteristics (such as defects), but is in fact someones perception of value, driven by his or her own weighted set of attributes (such as functions/ features, performance, schedule, defects, and resources). He argues against a fixation on zero defect software, explaining that the good enough approach:
...does not mean settling for average, but advocates delivering the best mix of attributes in a given competitive situation.
This books major contribution is a thoughtful examination of the environment required for flexible adaptive development teams and organizations. Readers should not expect a detailed low-level cookbook approach to rapid software implementation, as this book devotes most of its space to higher-level issues, those relating to management practices, the environment, and larger-scale cultural issues. Understandably specific technical practices (such as those relating to architecture, design, and testing) are not addressed here.
Rapid prototyping, rapid application development, spiral development, and incremental and iterative development have all been introduced and popularized in recent years. The rational unified process and extreme programming are now becoming well known. It would be foolhardy to compare adaptive systems development directly to these other methodologies, frameworks, techniques, and guidelines. Senior software people must be able to evaluate the relative strengths and weaknesses of various approaches, and select what is appropriate for their respective environments and project/product constraints. They will benefit most from this book.
Taking another cue from Peter Senge, one would hope Highsmith continues with the development of his vision, publishing more specific (if condensed) case studies like The Fifth Discipline Fieldbook. It would be fascinating to be able to study organizations instituting various changes and applying these principles in difficult situations in order to become more flexible, adaptable, and ultimately, more successful.
Pieter Botman is a professional engineer registered in the province of British Columbia. With over 20 years of software engineering experience, he is currently an independent consultant, assisting companies in the areas of software process assessment/ improvement, project management, quality management, and product management. He can be reached at firstname.lastname@example.org.
Programming Interviews Exposed
John Mongan and Noah Suojanen. 2000. New York: John Wiley & Sons. 272 pages. (CSQE Body of Knowledge areas: General Knowledge, Conduct, and Ethics; Software Processes)
Reviewed by Milt Boyd
Many years ago, it was popular for interviewers to say, Id like to see how you think, and they would present a puzzler in math or logic: A farmer had two buckets... or Alice and Barbara were sisters... or Two trains approach... or Students at the school march in formation....
There were three ways through these: Repeat the answer from another interviewer or interviewee, experience an Aha! moment, or slog through the details. It is not obvious how this was related to real engineering work, and mercifully, it went out of fashion in a few years.
It was surprising to find a book whose premise is that interviewers use exercises in code to judge candidates. Some interns and recent hires confirmed this to be true. What is the connection between working out a 15 or 20 minute problem, and working on a real project?
The authors provide answers to this and other topics. They give good advice for the job-hunting software engineer, basing this on what is, rather than what might be in some nearly perfect world.
The book is organized into 11 chapters, starting with The Job Application Process. After all, one does not get to face the problems until he or she gets the interview. The second chapter is Approaches to Programming Problems. It emphasizes the process, solving the problem, and analyzing the solution, with help when one gets stuck. Both in work and in interviews, one can get points by recognizing that he or she is stuck and that an approach is not working.
The next seven chapters are organized by problem type: linked lists; trees and graphs; arrays and strings; recursion; counting, measuring, and ordering; graphical and spatial; and other programming topics. If readers know the answer the discussion is reasonable; if they do not, then it is straightforward and helpful in getting to an answer they can understand. The range of problems is plausible, given the constraint that each has to be stated, solved, and discussed in the relatively short time of an interview.
The solutions to the problems are almost always analyzed with respect to space and time. Improved solutions that require less space or time often replace initial solutions. Occasionally, solutions are analyzed for the ability to be generalized or applied to other problems related to the presenting problem. They are rarely considered from the point of view of testability, or robustness of operation, which may be very important in real projects.
The next chapter concerns knowledge of specific topics. The interviewer wants to judge ones breadth or depth of competence, often starting from topics mentioned in ones resume. As before, the questions are representative, not exhaustive. They usually involve contrasts between two ways of doing things.
The last chapter is a collection of nontechnical questions: What do you want to do? Why should we hire you? Do you have questions? are all covered, with the usual others. For some candidates, these will probably be more troublesome than the code, and the discussion will usually be helpful.
For those with a couple years toward a computer science degree, some knowledge of C++ (and possibly Java), and seeking work experience in general development, this book is a good preparation for interviews. For those with more experience, it is a fine collection of clever puzzles in the software profession, giving a basis for fun and discussion with ones colleagues. This book is highly recommended.
Milt Boyd is a member of ASQs Software, Reliability, and Quality Management Divisions. He is certified as an ASQ Quality Manager and is on the IRCA registry of Certificated Quality Management System Lead Auditors. He is currently employed as a system engineer by Avidyne Co. of Massachusetts.