Tailored Software Applications
Our broad experience in software, backed by a solid theoretical foundation, enables us to design and build complete real-world products.
We believe in choosing the right tools for the job. We always select languages and frameworks considering the project requirements, the skills of the other developers on the team, the future evolutions and ... the overall elegance of the solution.
We are comfortable using many programming paradigms: imperative, functional, object-oriented or reactive.
Modern programming languages are no secret to us: C/C++, Java, Scala, Python, Ruby, C# or PHP.
Also including languages such as: JavaScript, CoffeeScript, LiveScript, TypeScript, ActionScript or Shell.
We adapt to new languages with ease and in fact we have done a few things with less common alternatives too: Go, Rust, D or Haskell.
Sometimes we design new domain-specific languages (DSL) perfectly adapted to the task at hand.
Web Applications
The trend today is to switch from traditional native applications to online web-based solutions, compatible with mobiles, tablets and desktops.
We design and implement web applications that are multi-platform, cross-browser compatible (e.g. IE, Firefox, Chrome, Safari, Opera), secure, scalable, evolutive and user-friendly.
It is possible today to build clean, robust and maintainable web applications by using the latest frameworks, programming languages and design methodologies.
Some best practices and useful components are distributed databases, stateless servers, mvc/mvvm patterns, web services, actors and stream processing.
Embedded Applications
Embedded applications were a privilege reserved to big corporations in the past. Today we are observing a massive revolution.
We prototype and implement solutions that sense the environment, collect and report observations, detect anomalies, discover and act on the physical world.
Thanks to Arduino, Raspberry Pi and the hundred other valuable players in this ecosystem, it is now becoming extremely easy to prototype and develop small hardware solutions that are changing already or will change the way we interact with the physical world.
Surveillance, monitoring, home intelligence, precision farming, goods handling and other kind of automation are the new exciting opportunities today.
Minimum Viable Products
As Einstein once said (albeit not so clearly): « Everything should be made as simple as possible, but not simpler ».
We have the advantage seeing your project with a pair of fresh eyes. As someone external to your organization, we provide a "thinking outside-of-the-box" mindset.
To ensure the rapid success - or early failure - of a risky project it is crucial to reduce its scope to the minimal set of features accomplishing the business objectives.
- Not sure yet if the idea will work?
- Budget is too small to cover all features?
- A usable solution was expected yesterday?
- Business requirements are partially defined?
... in all these cases, this agile methodology is particularly recommended.
Intelligent Deployments
Online applications lead to complex deployments. Handling manually a dozen servers or more becomes an error-prone and time-consuming task.
We developed and used solutions to simplify and automatize this in the past. We design and implement professional deployment strategies suitable to your needs.
Thankfully today this is not a brand new problem anymore and several powerful open-source tools have matured, namely: SaltStack, Chef, Puppet and Ansible.
- Always online aka. zero down-time?
- Unified system maintenance?
- Always up-to-date with security patches?
- Automated backups?
- Dynamic scaling of resources?
- Multiple hosting providers?
These are the concerns addressed by the tools listed above. It becomes obvious once in place that this is how system maintenance should ever have existed.
Outsourcing
After 5 years of experience working in China for a software venture opened our perspective on outsourcing opportunities.
We have trusted connections in China and with freelancers around the world. We can leverage these to offload the time-consuming - albeit simple - tasks and parallelize the project deliveries.
The most valuable lesson we learned: "Outsourcing is not a magical word that will reduce the costs".
Some challenges are to take into account the cultural differences, communicate frequently on a very sharp and technical level, as well as prepare contingency plans.
When done the right way, outsourcing provides many benefits such as: 24h/day teams, scalable work-force and cost-effective manual labor otherwise impossible (e.g. "Mechnical Turk").