Philosophy

  • 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.

Process

  • 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 its development.