|
| |
Our Company Philosophy
We are passionate about our work at SIGNITEK.
 | Identify the optimal tool for the job!
It's no accident that professional construction workers use power tools
extensively and so should you. We believe in asking "could this job be
done more efficiently with another language, vendor or operating
system?"
Make no mistake! Some jobs require hand
crafting with hand tools like assemblers. Other jobs that don't require
portability can be done with Visual Basic. Still others can use Java. Be
aware of what tools are in the tool chest. |
 | Always identify perils, merits and alternatives!
Unlike other consultants, we are not going to
sugar-coat anything. If you have chosen to employ or receive training on a
particular product, programming language or operating system, we believe we
owe it to you to identify both the perils and merits of that choice. And we
will also identify alternative approaches.
Alternatives will help give you the big picture
and provide backup strategies. They also help you understand if you are
trying to accomplish something the inventors of the technology never
anticipated -- a precarious place to be.
|
 | Knowing the perils is more important than the merits!
Hidden perils will cost you more money than the merits will save you!
Typically it's never a problem to learn about the merits: everyone
loves to tell you about the merits! No one will tell you about those nasty
gotcha's that devour entire projects -- except SIGNITEK!
This is a radical approach -- but wrong decisions are costly to your
organization. What the vendor (or any other proponent) does not say is
always more important than what they say.
You should not, however, conclude that a risky
choice is always a bad choice. Like a good stock broker, we at SIGNITEK are
here to help you manage risk. New and risky technology often exists for good
reasons: to solve problems. Let SIGNITEK help you determine if a new
technology is going to solve your problems. |
 | Know what to avoid!
Any musician will tell you the rests are more
important than the notes. At SIGNITEK we believe the rests are the perilous
features and approaches. Identifying these are as important and often more
important than identifying what to pursue. |
 | A little knowledge is dangerous!
Things
should be made as simple as possible, but not any simpler. Albert
Einstein (1879-1955)
For
every problem, there is one solution which is simple, neat and wrong. Henry
Louis Mencken (1880-1956)
Always get the big picture!
Experienced C++ programmers
know the perils of shallow copies!
(They
make your program crash and are generally caused by missing copy
constructors or missing overloaded assignment operators, which,
unfortunately, are not trivial.)
Experienced Win32 programmers
know the perils of leaking global memory.
(They
make your computer hang.)
Unfortunately, avoiding these problems may not
be simple. At SIGNITEK we believe in giving you the information necessary to
avoid the problems down the road.
This also means teaching concepts instead of
facts. |
 | Concepts instead of facts!
Understanding concepts doesn't just mean only identifying perils and
merits.
In addition to the alternatives in the bigger
picture, getting the concepts means
 | "Sure it's a great feature! But how, when and where would you use
it?"
There
are a lot of programming languages (operating systems,
products...) out there with a lot of great features, but which
feature is going to help your company? Blindly applying good features is
a favorite recipe for disaster! |
 | Knowing when not to use a feature is more important that knowing when
to use a feature. |
 |
Is the feature designed to solve a more
complex problem than you are? If so, is there a simpler feature that
will do the job better? |
|
 |
Long Term Investments
Prototyping has its place.
Long term customer relations.
Long term project investments means investment
up front in thorough specifications, extensive analyses, and robust designs
and durable implementations. |
 | Proactively Maximizing Re-use
Re-using what? Everything we can get our hands on!
Marketing, analysis, design, code within a project, code cannibalized
from other projects.
Proactively maximizing re-use does not mean you scoured your company and
the entire internet looking for fragments of code to use! This is a
very reactive approach.
Proactive re-use means anticipating re-use -- a definite long term
investment. Anticipating re-use means your analyses, designs,
implementations and testing are minimally impacted by change.
Proactive reuse also means maximizing your use of well design libraries.
Sometimes we call this class user
programming although the concept applies to analysis and design as well.
|
 | Minimizing the Impact of Defects, Changing Platforms ...
Proactive re-use is all about minimizing negative impacts (which impair
our ability to re-use our efforts).
A proactive approach towards maximizing re-use is making the long term
investment to create analyses, designs, implementations and test strategies
that are minimally impacted by defects, scope creep, changing problem
specifications, changing vendor specifications, changing operating system
vendors and changing database vendors (to name just a few things that could
change -- the list goes on!).
So we constantly ask ourselves: can these analyses and designs withstand
the punishment of
Changing from
C++ to Java (for example)
Changing
database vendors from Microsoft to Oracle (for example)
A defect in
another module you did not write
Late breaking
(or changing) customer requirement
Changing
graphical user interface technology
And, if you are really good, you can ask these
same questions about your implementations (except implementations tend to be
very language dependent). |
 | Early Detection of Defects
Testing is an ongoing process that begins with the analysis model and
never ends.
Yes -- testing is an extremely expensive
process. But so are undetected defects.
The cost of a defect increases exponentially
with time. If you wait until implementation time to correct an analysis
defect it has become extremely expensive -- but not as expensive as having
another minor release. |
 | Maximizing Class User Programming and Minimizing Class Provider
Programming
The concept is simple. There are two
kinds of programming: Class user programming means using someone else's
classes. Class provider programming means creating classes for others to
use. (Notice we preclude the possibility of creating classes that no one
else uses).
In a perfect world this would be an extremely simple question: Is it more
productive to use other people's classes or write your own?
Creating your own classes, modules, packages or subsystems seriously
degrades your productivity. This is especially true in the implementation:
class provider programming is the hardest kind of programming there is! So
how do you recoup your lost productivity when class provider programming is
unavoidable? Answer: Class user programming!
In other words, class provider programming is still productive if (and
only if) you can find an audience that uses your code. If your name is
Alexandar Stepanov (the author of what has since become the C++ standard
library), you have already achieved truly large scale re-use. Most of will
never achieve re-use at this large scale. A few of us may achieve small
scale re-use where a few of our colleagues will re-use our code. All-in-all,
class provider programming is a tough proposition: it's tough, slow work
(that must be thoroughly documented) and it's usually even tougher to get
other people to re- use our designs and implementations.
A much easier approach is to maximize the amount you use other people's
classes. Since this is not a perfect world, some discrimination is
appropriate here. Not all the free class libraries on the internet are high
quality quality and sometimes we cannot avoid class provider programming.
If there is no re-use, there is no object-orientation!
If you are a class provider, your classes are not object-oriented
until someone else benefits from re-using them.
|
 | Ultimately, its all about maximizing YOUR productivity!
In the end, you (or your manager) has to ask himself, did we maximize
productivity? We, at SIGNITEK, are constantly asking what can we do to
maximize your productivity. Give
us a call so we can share more of our ideas. |
|