|
Running medium
to large-scale development, like any large-scale project, is more of an art
than a science. However, there are some principals, which can facilitate
managing a development organization to a successful product launch.
Typically, a
development organization is comprised of three major and distinct functions and
as such should be divided along those lines for organizational purposes. These
three areas are: Development, Program Management and Test. While there are more
than just three functional areas of development, like: operations, hosting,
user education, etc. These three areas occupy the bulk of the responsibilities
and tasks of the development team. As such the other areas can often be
collapsed into these three larger areas. Key to managing these three
organizations within the development team is to outline not only what each is
responsible for, but also what each is NOT responsible for and where each is
dependant upon the other two for success. The best analogy for comparison
purposes would be a three-legged stool. No two legs can independently support
the stool, and no one leg is more important than the other three. They must all
work together to achieve the same objective. Provided they are, they can
support massive amounts of weight on top of the stool.
First, lets
examine Development's leg of the product development stool. Many technology
centric companies tend to take the perspective that Development should lead the
entire effort focused around product development. Given the nature of the work
being performed in this organization it might be understandable to assume that
this part of the organization should be the one to lead the entire development
effort. Typically, organizations that have Development single-handedly leading
the entire effort, quickly find that this is the less than optimal way to
organize their efforts. Development's core responsibility should be focused on
what technologies the development effort should employ and utilize. It should
be their core responsibility to code the product as per definition from Program
Management. They are responsible for the final implementation, because the
mantra "the code is the spec." is a truism and customers' only
experience will be with the product, and not the specification. Development is
NOT responsible for defining what customers want in the product, nor are they
focused on the world after their product ships. Development's responsibility is
to develop the products as per the requirements outlined, utilizing
technologies they feel are most appropriate, and in a manner that yields
products on a mutually agreed upon time table.
The next leg of
the development stool is Program Management. High tech companies tend to pick
Program Management to head product development, if they don't pick development.
Again, this can seem a rational choice, because Program Management is
responsible for specifications and schedules. As such, Program Management is
the one group most people turn to, through out the development cycle, to check
on the status of the product. However, you should not fall into this trap.
Because many organizations in which Program Management leads the development
effort tend to become overly process oriented, also extremely focused on
schedules, and less focused on the code, the customer experience or delivering
a product to market. Program Management should be responsible for gathering
customer feedback either from marketing or directly from customers. Program
Management is then responsible for incorporating that feedback into a
specification document, this articulates features and functions to the degree
that a developer can code from it. Finally it is responsible for managing the
development process to ensure that the product goes out the door on a mutually
agreed to time table. Program Management is NOT responsible for determining
what technologies are going to be used in developing the product nor
micro-managing the development organization or its priorities. Program
Management often falls into this trap and it can cause the whole effort to fail
as well as create a considerable amount of organizational friction. Don't let
this happen.
The final leg of
the development stool is Test. Many high tech companies view Test as the
whipping dog of the development organization. It often doesn't get quite the
attention and respect it deserves, nor does it usually get an equal seat at the
product development table. Don't fall into this trap. The Test leg of the stool
is an equal with all the others and needs to be treated as such. Test, and
often it will incorporate not only the testing of the product for QA, but also
operations, after sale service and UE as part of the organization, is key to
managing a product organization. The Test organization's core function, as the
name implies, is to test the product against QA metrics to ensure that it will
meet high customer satisfaction. Test is your last, and sometimes only, line of
defense to ensure that the product developed meets the specifications and
requirements established at the onset of the product development cycle. If the
"code is the spec", then Test is your litmus test to ensure the code
is up to your spec. Test is also responsible for providing final approval for
the code in a product that will be shipped to customers. This enables Test to
effectively check the other two legs of the development stool. Test is NOT
chartered with defining what customers need or want, as this is outside the
scope of their responsibilities, nor are they focused on the technologies used
or the coding of the product. Sometimes Test can fall into the trap of trying
to code the product, as it goes through the process of testing its quality,
this can cause a series of problems, the least of which is organizational
friction. This should be avoided at all costs.
These three
organizations work in a checks and balances model. Program Management drives
the specifications and schedules, providing a check against Development and
Test to ensure that the product comes out in a reasonable timeframe.
Development is responsible for coding the product and selecting the
technologies, ensuring a check against Program Management and Test creeping in
random customer feature requests and limiting the scope of the project. Test is
responsible for testing the product and giving final approval of product to
ship to the market, providing a check against low quality products being pushed
out by Program Management or weakly developed code from Development.
Overall,
management of the entire development organization should lie in an individual
that has all three of these organizations reporting to him or her, and
preferably experience in all three and not in any one of these three. It is the
same as the stool having a top to which all three of the legs are attached,
rather than having one of the three, legs serve as the base connecting them
together.
|