Page 60 - The Art of Designing Embedded Systems
P. 60

Stop  Writing Big Programs  47


                    and you can neglect the hard problems. Extend the schedule to infinity and
                    the product can be perfect and complete.
                         Too many computer-based products are junk. Companies die or lose
                    megabucks as a result of prematurely shipping something that just does not
                    work. Consumers are frustrated by the constant need to reset their gadgets
                    and by products that suffer the baffling maladies of the binary age.
                         We’re  also  amused  by  the  constant  stream  of  announced-but-
                    unavailable products. Firms do quite exquisite PR dances to explain away
                    the latest delay; Microsoft’s renaming of a late Windows upgrade to “95”
                    bought them an extra year and the jeers of the world. Studies show that get-
                    ting to market early reaps huge benefits; couple this with the extreme costs
                    of engineering and it’s clear that “ship the damn thing” is a cry we’ll never
                    cease to hear.
                         Long-term success will surely result from shipping a qualify product
                    on rime. That means there’s only one leg of the twisted tradeoff left to fid-
                    dle. Cut a few of the less important features to get a first-class device to
                    market fast.
                         The computer age has brought the advent of the feature-rich product
                    that no one understands or uses. My cell phone’s “Function” key takes a
                    two-digit argument-one hundred user-selectable functions/features built
                    into this little marvel. Never use them, of course. I  wish the silly thing
                    could reliably establish a connection! The design team’s vision was clearly
                    skewed in term of features over quality, to consumers’ loss.
                         If we’re unwilling to partition the product by features, and to build
                    the firmware in a clear, high-priority features-first hierarchy, we’ll be for-
                    ever trapped in an impossible balance that will yield either low quality or
                    late shipment. Probably both.
                         Use a feature matrix, implementing each in a logical order, and make
                    each one perfect before you move on. Then at any time management can
                    make a reasonable decision: ship a quality product now, with this feature
                    mix, or extend the schedule until more features are complete.
                         This means you must break down the code by feature, and only then
                    apply top-down decomposition to the components of each feature. It means
                    you’ll manage by feature, getting each done before moving on, to keep the
                    project’s status crystal clear and shipping options always open.
                         Management may complain that this approach to development is, in a
                    sense, planning for failure. They want it all: schedule, quality, and features.
                    This is an impossible dream! Good software practices will certainly help hit
                    all elements of the triad, but we’ve got to be prepared for problems.
                         Management uses the same strategy in making their projections. No
                    wise CEO creates a cash flow plan that the company must hit to survive:
   55   56   57   58   59   60   61   62   63   64   65