Improving software and maintaining an infrastructure
We can adjust existing software for your needs by porting it, extending it or improving its quality. We've worked on many projects written in various programming languages. Getting used to a new code base is a very good exercise we enjoy thoroughly.
Additionally, we can maintain an existing infrastructure for your company, such as a website, service, server, application etc. If you wish to host your application, website or an email on the Internet and don't want to bother with managing the server, we can provide hosting or create and configure a separate VPS just for you. We have been working with Linux boxes for many years and we can do that with ease.
Minimum viable product
We specialize in creating prototypes (minimum viable products), projecting solutions and implementing them. We have experience in device drivers, operating systems and application development. We've worked with a wide range of embedded platforms (Arduino, Raspberry Pi, Beagleboard, Cubieboard, Tegra, Zynq, Parallella etc.).
Our solutions are reliable and well designed. We achieve that through extensive testing, writing documentation and following the best development practices. Such an approach results in extensible, well-tested and production-ready software.
Maturity of the dependencies
Wherever possible, we try to depend on well-tested, battle-proven software. If no such solution exists, we carefully test and improve existing libraries to meet the reliability requirements. We're team players – we try to contribute to the projects we use.
Before implementing any new feature we first write tests for it and document the API, which clarifies its usage and responsibilities. This helps write software that lasts a long time and is easier to maintain.
We try to avoid feature bloat by carefully designing what needs to be implemented to achieve the final goal. We're also very careful when we pick dependencies to make sure that the final solution won't be a resource hog or work inefficiently.
Despite being wary of adding unnecessary features, we design software with extensibility in mind. It is important since requirements may change or additional functionality may be needed in the future. This makes software reuse possible and improves the flexibility of the development process.
Extensive documentation, usage instructions and tests are a must. This is crucial if software is to be usable longer than a few months or years.
We avoid vendor lock-in because of ethical and practical reasons. This means that you may pass the work to other developers and there is no risk that the software will reach a dead end when the vendor you depend on closes its business.
Reducing the effort of software development and usage to the minimum makes it maintainable and extensible by everyone, not only the authors. If we use software created by other people, we try to improve it and "give back".
From the technical perspective, we have experience in the following:
- Programming (Common Lisp, C/C++, Java, Android)
- Graphical UI libraries (CLIM, LTK, QT, DirectFB)
- Artificial intelligence (NLP, classical approaches)
- Compilers and embedded devices
- Linux (kernel drivers, distributions, administration)
- Programming in the POSIX systems: Linux, Unix, OSX, Windows (via MinGW and Cygwin), Android
There are many other technologies we have used in the past, but the above is what we feel most proficient in.
Depending on the project the price of consultancy may vary between 10€/h and 50€/h. The exact price depends on various factors – for instance:
- How difficult the task is
- The value it will add to our portfolio
- Whether you are willing to let us release the software under a FOSS license
- How fun it will be to work on the project
- The experience we will gain during the consultancy
We may also agree on a fixed price with well-defined milestones. We prefer agile methodology where we have a constant contact with the client – this approach results in a product better suited to your needs and in much shorter delivery time.