We build sophisticated and creative
solutions that solve complex
problems. We understand the important
role that system, hardware, and software
design play in the work that we do. This
is why we have taken a holistic approach
to our product development process.
System-Level
Product Development Approach
Other development methodologies
typically start with a requirements
phase, that leads to a design phase,
that leads to a development phase, that
leads to a test phase, and then finally,
years later, a release. These
methodologies are quite poor at
predicting the amount of work and time
required to complete a project, provide
very little customer interaction, cannot
handle changes in requirements, and
cannot adapt to problems that arise
throughout the project's
lifetime. Instead, we have borrowed
best-of-breed practices from the Open
Source communities and other agile
methodologies to produce a system-level
development approach that is built
around each of our advanced
technologies.
Our system-level development approach
breaks the development cycle into
testable feature sets that are in-turn
broken down into testable phases unique
to the technologies we provide. These
phases are Scenario Simulation,
Algorithm Simulation, Hardware
Abstraction and Emulation, Hardware
Integration, and System
Integration. This approach allows us to
take theoretical ideas and quickly and
easily see real-world results in very
short time periods. We can then continue
to build upon these ideas and continue
to add features, or further refine each
phase.
Principles
Engage our customers in the product
development process from start to
finish.
Begin with a mutual understanding of
our customer's needs and goals.
Demonstrate our relevant expertise
to our customers through system
simulation.
Use the insight gained through
extensive system simulation and
customer interaction as a start to
product development.
Evolve our products by building-out
each subsystems via initial models
and simulation.
Use sophisticated software
techniques to emulate hardware
components until hardware is
available.
Constantly evolve and iterate
components so that system
requirements are always met.
Keep a pervasive focus on software
architecture, development, and test
thoughout our entire product
development life-cycle.
Embrace change.
Tools
While we believe no one tool is a
perfect fit for every project, we have
found that some tools work better than
others. These tools help us build
simple, easily understood and testable
components that can be stitched together
to build larger solutions. We also
strongly believe in the advantages that
Open Source tools provide. These tools
are better designed, better tested, and
better maintained than their proprietary
counterparts. We also choose tools that
help us with our test-driven approach to
software development. The tools we most
like to work with are: