Our software embodies core beliefs, steering purposeful development with unwavering integrity and visionary principles.
We believe in building simple software systems. Complexity arises primarily from interactions of concern and over-engineering. We design modular software and untangle separate concerns, with clearly defined boundaries for interactions. We also avoid any kind of premature optimization and abstractions.
Understand the Problem
We understand that software is often a means to solve a problem. Hence, we don’t shy from spending time to understand the user, the actual problem we are trying to solve, and the associated context. This helps us to come up optimal solutions rather than quick fixes or half-baked solutions.
Build to Last
We obsess over the reliability of our software. We strive to build fault-tolerant systems with strong error handling that can run with minimal downtimes in the real world. We do this by using the right technology (type-safe languages), extensive testing (unit + integration + e2e), strong monitoring (logging, error handling, orchestration, etc), designing for redundancy, and above all by making minimum assumptions about the real world.
For all our software projects, we try to ship small working prototypes as soon as possible. By shipping quickly - you get an opportunity to get feedback and any course correction if required.
Ability to Change
We build adaptable software, anticipating change. Prioritizing maintainability, we avoid restrictions, minimize assumptions, decouple systems, and prioritize clean, readable code. While not there yet, we aspire to adopt a literate coding style.
Our most important principle is honesty, reliability and transparency. We communicate clearly, meet our commitments, respect our client’s time and money, and deliver the highest-quality software.