- Harness hardware to solve client's software needs - We have experience solving difficult 3D graphics, performance,
and computational problems using GPU shaders, GPGPU computing, multi-core CPUs, and clusters. We assess the computational
needs of the client's software and work to identify and create solutions that maximize efficient use of available hardware.
- Don’t reinvent the wheel - Most problems have already been solved by others, and often with open-source solutions.
We have experience with many open-source and cross-platform software solutions such as Qt, VTK, CMake, boost, doxygen, and many more. If using open-source
packages is within the client’s licensing restrictions, we always try to look for solutions from others first before reinventing the wheel.
- Deliver what the client needs in their software environment - Every company has its own
software infrastructure and solutions for version control, software toolkits, coding standards, languages, and design.
Our goal is to be adaptable to the client’s environment and work within their code base and processes to deliver what they need.
- Leave the client with the ability to maintain what was written - One of the biggest problems with hiring outside
consultants is after they leave, often so does the knowledge of how their code works. We will deliver detailed documentation
and training to help ensure that the client is not left with code they won’t be able to maintain on their own.
- We will first arrange to meet with the client (at no charge) to understand the requirements
of the software project. During this meeting we will find out in detail what the project
will entail and make sure it is a match for our skills.
- We will put together a proposal (also at no charge) detailing the work to be done and
a compensation structure. We can work both on an hourly basis and a fixed project cost. The choice
of compenstation structure will depend on the client's needs, the solidity of the project requirements, and
the extent to which the software will involve exploratory development.
- If we have agreed to work together, we will start by learning about your particular software process,
tools, code standards, and development environment. We believe in developing software that
follows your process. For example, if you require unit tests, code reviews, particular documentation standards
(such as doxygen), or specific UML-based design documents, we will develop these for you.
For medical devices, this also means following your quality standards. For smaller organizations that have not yet fully
defined a software process, we can help you refine your process based on our past experiences working with
software organizations large and small.
We are entirely flexible on the choice of development tools, having experience in Windows, Mac,
Linux, and handheld devices. If the client is looking for recommendations in any of these
areas, we are happy to provide recommendations on process and tools based on past experience.
- Once development begins, we will be in close contact providing status updates and
working closely with your team. We believe that a large part of delivering quality software means really
observing how it will be used.
- We will work with you in the testing and delivery of the software to make sure
it has met your requirements. There is rarely such a thing as bug free software, so if you
wish to bring maintenance in-house we can work directly with your development team to
teach them about the software and bring them up-to-speed on maintenance. Ideally, if you
have sufficient resources, we will actively work with your staff during the software development
to make sure they understand what is being developed and how it works. The
most effective way to bring the work in-house is to actually play a big part in reviewing