The difference in productivity among software developers can be
greater than ten-fold. Productivity needs to be measured over the
full life-time of the software system, and it includes initial
development, deployment, user training, maintenance, user support, and the
cost to enhance the system as business needs evolve.
These software development strategies are a key part of Wedelich Consulting's success.
Put Business Value First
Business software exists to provide business value. All
too often, this simple fact is lost in software development projects,
and technology desires drive development. Alan Cooper recently
wrote, "Most of us geeks are motivated by technical excellence
more than by business success. Executives sense this, so they
distrust us and keep us on far too short a leash."
Wedelich Consulting keeps the principle of business
value first in all phases of software development.
The Right Solution
Too many software projects miss the target because the
development team did not truly understand the business need.
Excellent communication skills and
domain knowledge help ensure development of the
Right Solution.
Rapid
application development and incremental design
techniques also help keep the project on track.
Rapid prototyping is a valuable tool that provides a tangible
product to improve communication. Rapid prototyping helps address the design
challenge: "Users seldom know what they want, but they always
know what they don't want when you show it to them."
Incremental design also helps keep a project on track.
Incremental design identifies critical aspects of the system that are
well known. Developing these parts first provides an intermediate
deliverable to review with the client, and it often helps to clarify less certain aspects of the project.
Design for Change
Change is a constant and the pace of change in business is
increasing. Software designed for change reduces maintenance costs
and extends the useful life of the application. Data driven
systems place key data in tables, and the software uses these tables for
simple things like selection lists or for more complex data driven menu
items and forms. Abstract classes (object
oriented programming) along with collections are the tools to store
complex objects and design programming logic that works with both
today's and tomorrow's requirements.
A simple example in the well engineering
domain is a Catalog Manager tool that provides a catalog of
different types of oil field equipment. Tables define the types of
catalogs (drill pipe, bits, ...) and identify the data source for the
catalog. An abstract child form defines editing features for the
catalog. Thus, new catalog types can be added to the system
without requiring any code changes to the Catalog Manager.
The frameworks for decision support and for
well engineering
represent more complex examples where the software is designed to easily
accommodate new data presentations or new technical applications.
Team Selection - Small
Experienced Teams
Software development requires a detailed understanding of the
business problem - the computer makes no assumptions and must be
explicitly instructed. The volume of little details and small
decisions is overwhelming. Our experience shows that small teams
of 2 to 5 very experienced developers can significantly out perform
larger teams of less experienced developers. This strategy
requires personnel with the experience to perform multiple functions.
Component Based Development
A wise consultant said, "Buy components - build applications."
Cost effective applications leverage third party components for grids,
charts, and other user interface widgets. Wedelich
Consulting has significant experience with
Far Point Spread,
Component One
(Chart, Sizer, Draw), and Microsoft advanced controls.
When third party controls are not available, then custom components
can be derived using other controls. Wedelich Consulting
has developed UnitControls to allow input and output of technical
data in English, metric, or a user defined mixed system of units.
Controls include a captioned text box, combo boxes and grids with
different value and unit types in each column.
|