Over time we have built up a company philosophy... of how
we operate and conduct business. This list is, in effect,
our modus operandi, and all of our consultants adhere
to it:
|
1
|
Order does not come out of chaos.
We don't undertake engineering projects haphazardly. Cost
overruns, significant design flaws, poor performance,
and high maintenance are some of the hallmarks of poor
engineering. We don't believe in over-engineering, but
we do believe in the importance and benefits of a solidly
designed engineering project. |
|
2
|
Identify and get rid of the non-essentials.
The pragmatic approach we always take is to work with
the client and determine together what core functionality
they must absolutely have. Identified non-essential features
will be tagged for development and deployment at a later
project iteration if the client so desires. This allows
us to keep the project lean, manageable, and reasonable
in terms of costs and time for the initial deployment. |
|
3
|
Simplify the design. Whether it's a network
infrastructure or software development project, one
of our primary objectives is to simplify the design.
A simpler design is easier to build and easier to maintain.
|
|
4
|
Speed up design via iteration.
A good design doesn't usually pop into existence fully
developed. We believe in rapidly iterating through the
design process, starting with a solid framework and then
fleshing it out, correcting design flaws or wrong assumptions
in the process. |
|
5
|
Regularly assess the situation.
We believe that it is absolutely critical to constantly
assess the current situation and count the costs. For
example, are we beginning to spend too much time trying
to implement a non-critical but tricky feature in a software
development project? Strive to keep the ROI high and
avoid getting too close to the point of diminishing
returns. |
|
6
|
Move quickly and aggressively.
While we strongly believe in the importance of a realistically-scheduled
project (and we will not budge from that), we understand
that in order to stay competitive we need to move aggressively
and show results quickly... whether it's responding to
an RFP, delivering custom software, or finishing a systems
integration project. The principles mentioned on this
page allow us to do just that. |
|
7
|
Use the right tool for the job.
Whether it's a software tool, a network performance monitor,
a programming language, a design pattern, or an application
framework, for instance, we understand the benefits of
using the right tool for the job. Using the wrong tool
will only lead to headaches, along with much wasted time
and money. |
|
8
|
Don't reinvent the wheel. What tool
or software can we use that's already out there? What
established design patterns make sense for this particular
software we are planning on developing? There is no point
in reinventing the wheel "just to prove that we can
do it" or just because we didn't do our due diligence
in researching the business or technology domain at hand.
At ekko systems, we don't believe in wasting time or the
client's money. |
|
9
|
Run the distance, not the sprint,
but shift gears when necessary. We strive to pace
ourselves so that we can run the distance. This translates
to a regular daily workload as well as a regular sleep
schedule. It is a fairly common aspect of human nature
to want to slack off a bit in the beginning stages of
a project "because there's a lot of time left to
get the project done anyway." However, we have learned
the importance of self-discipline and keeping the pace
from start to finish. There are less surprises this way. |
|
10
|
Understand that doing something significant
takes significant effort and time. And sometimes...
what may at first seem simple may turn out to be more
complex than expected. In all our collective years of
software and systems engineering, we have learned how
to better identify what may take significant effort and
what will not. And we continue to learn from our own experiences.
Our point is this: Invalid assumptions, if not corrected
quickly, will lead to failure, wasted time, and a demoralized
atmosphere. |
|
11
|
Don't take on projects we aren't equipped
to handle. If we don't have the necessary development
resources, in-house expertise, or knowledge of a related
technical domain that the client requires for a given
project, we won't pretend that we can do it. If we know
of another consulting company that might be able to take
on or bid for the project, we will introduce that company
to the client. |
|
12
|
Only release a system when it is ready.
We strongly believe that systems that are not ready for
"prime time" should not be released. Whether
it's a software development or a systems integration project,
if sufficient QA testing has not been performed, if the
critical bug count is too high, or if the system performance
is sub-par, then it doesn't deserve to go into production
or commercial use yet. We understand that business or
marketing pressures must be respected and adhered to as
much as possible, but ultimately something that isn't
ready should not go out the door. |
|
13
|
Establish and nurture good communications. The
success of a project is directly proportional to the level
of communications between our clients and us. This is
why we take good communications very seriously... and
that is why we understand the importance of listening. |
|
14
|
Never forsake the regular reality
check. Before we decide to pursue a design approach,
submit a design document or a response to an RFP, we do
our homework. We research the facts on the subject at
hand while filtering out any overzealous marketing hype.
Ideas are bounced between our senior consultants to make
sure that what we propose to accomplish is realistic in
terms of technologies, project costs, design and implementation
time. Fantasyland belongs in Disneyland, not in engineering
projects. |
|
15
|
Systematic troubleshooting works...
especially if you know where to start looking. Complex
engineering endeavors, no matter how-well engineered and
thought out, will inevitably have problems. Unexpected
bugs or seemingly non-intuitive problems are bound to
crop up sometimes. With our extensive experience in software
development, hardware, networks, and systems engineering,
we'll have a good guess as to where the problem's cause(s)
might be... and we'll know what questions to ask and what
tools to use in order to track the problem down
systematically. |
|
16
|
Keeping the brain stimulated leads to better productivity.
Anyone can attest to the fact that sometimes one might
get stuck for an extended time on a very difficult problem
or task, resulting in reduced brain stimulation and productivity.
While we don't shirk tackling difficult problems, we have learned
that an easy and effective way to stay productive is for each of
our consultants to have several responsibilities or tasks
to be working on concurrently. These could be different
tasks in the same project or in different projects,
but the idea is simple: rather than "burning out"
trying to solve a difficult problem over an extended
and ineffective period, just switch to a different project
or task and accomplish something there before returning
to the tackle the previous difficult problem... this
time mentally fresh!
|
|
17
|
Learn and adapt. There is always
something we can all learn from in order to improve our
engineering process. Therefore, as we manage a project
from initial vision to completion, rollout, and maintenance,
we keep a log of things we or our client did, could have
done, or could have done better so that we can operate
a little bit smarter the next time. |
|
18
|
Build good relationships, not merely
a list of clients. We believe a truly successful business
does not neglect the human element. |
|
19
|
Stay current and sharp. As an old
proverb states, "As iron sharpens iron, so one man sharpens
another." We know that a technology company that doesn't
keep current about what's happening in the industry won't
survive. To this end, all our consultants believe in
always taking the time to study, do research, attend
seminars, and disseminate useful information amongst ourselves
and motivate one another. |
|
20
|
Our clients should always have a pulse
on where we are today. Our consultants are accountable
to each other on a daily basis to make sure that we will
always have enough engineering resources to deliver what
we are supposed to deliver on time. Furthermore, since
we keep each client updated on our progress status on
a regular basis (usually daily or weekly, specified by
the client) our clients will always have a pulse on where
we are today. |
|
21
|
Never lose sight of integrity. We believe in
the importance of personal integrity, as our firm's reputation
rests with each of our consultants. We don't claim to
be perfect, as no one on this planet is perfect. But we
strive for perfection. And as our firm's success hinges
on our reputation we don't take our conduct lightly. We
won't make cheap promises. Rest assured we won't leave
your company hanging (and our own reputation tarnished)
by delivering shoddy software late that doesn't work. |