Project life cycle, ...the process
Firstly, forget technology,
(i.e. computers, software, databases, etc.). Thoroughly learn the customer's
requirement or business process. Start with strategic concepts. Then develop a construct
as a process, (i.e. systematical arrangement of goal satisfying procedures), as
oppose to a technical application.
Secondly, the entire team
story boards the customer's requirement to fully understand the intent of the project's
end deliverable. Likely employ a domain specific development tool to contain a specific
objected-based model.
Thirdly, begin working
towards the end deliverable by writing a fully extendable pattern-based
framework.
Regarding patterns: although
groups and consortiums have authored elements of reusable object-oriented software
as "patterns," it is significant to define a pattern. A pattern is a three part
rule expressing a relation between a certain context, a problem, and a
solution, (Alexander, C. 1979). A pattern is at once both an instruction and a thing
specific to the real world. A pattern is only sufficient when it is both a
functional component, (i.e. thing), and also sets the rule(s) instructing how
to create or recreate that thing.
Which patterns to use?
Consider the customer's requirement or business process. There are traditional
processes for a company to amass wealth and therefore succeed. In one approach,
a company can employ distinctive competencies and set its products and services
apart from the competition (Luftman & Brier, 1999). Differentiation or
uniqueness will attract customers away from competitors and therefore gain a
market share advantage (Porter, 1980). As such, since the
customer's requirement or business process is likely unique, then shall be the
patterns used to develop software. Simply falling back on tried and true
patterns is insufficient.
Erich Gamma, and others
identified as The Gang of Four, will be first to suggest their catalog
of 23 well-known patterns are simply just the start. Their effort was simply to
provide a recognizable landmark-like language criteria, (i.e. common design
vocabulary), to begin the study of patterns. Therefore, since differentiation
and uniqueness are bedrock to business success, the true effort is to prepare a
set of patterns based on abstract classes, and perhaps more correctly
interfaces, affording inheritance-driven polymorphism. The result or fallout
would likely include natural extendibility.
Returning to "...the process",
commence an iterative test-driven coding process based on the directives within
the framework. Test-driven signifies unit tests reflecting constructs of the
project are developed first. Then code is developed to resolve the unit tests.
Use of a code coverage tool is necessitated. Codify and iteratively
review all new discovery with both team and customer. Within an automated
"nightly build" process continually build and alpha test all components with
legitimate front-to-back framework-based test harnesses. Unit testing at this
level is insufficient. Further, venturing outside the framework likely
indicates special purpose programming, (i.e. spaghetti code), which is
abhorrent.
Alpha test failures
identified as syntactical necessarily shall be corrected at earliest
opportunity. Alpha test failure resulting from product construct and framework
omission necessitates an iterative meeting process requiring attendance of architectural
personnel. This will require customer notification as well.
Nearing the end of
development employ beta testing by an independent panel. Regard beta test
failures, and subsequent fixes, as new discovery, not as "bugs." If there are
syntactical errors, (i.e. bugs), at the beta test stage, then unit testing and
test driven development has failed and there needs to be a project
re-assessment.
Make customer deliverable
beta release for customer approval. Iterate through the customer approval beta
test until customer accepts entire project. Make final delivery.
Reality vs, ...the process.
Reality dictates there are three fundamentals to software development, 1)
timely delivery, 2) quality, and 3) features. Largely timely delivery is
dictated by consumer interest, market and channel conditions, the economy,
first-to-market advantages, and financial leverage. Businesses can not pick and
choose when their products or services will be popular. That is up to the
consumer. Therefore only quality and features remain as adjustable measures to
ensure timely delivery. It is academic. What good is a feature if its quality
is poor? Therefore, features are on the chopping block and first to go.
Alexander, C. (1979). The timeless way of building. New
York: Oxford University Press.
Luftman, J., & Brier, T. (1999, Fall). Achieving and
sustaining business-IT alignment. California Management Review, 42(1), 109-121.
Porter, M. (1980). Competitive
strategy: Techniques for analyzing industries and competitors. New York:
The Free Press.
Copyright Brian Smith PhD,
San Diego CA 2005-2011