ENGINEERING
PRINCIPLES

We use a transparent project flow which makes the progress visible at each stage. This keeps the process in control but allows to be flexible to requirement changes.

Design & Architecture

We pay close attention to the design of our projects. We know the benefits of good software design. We make sure to understand the tradeoffs of every design decision we make.

We improve the quality of our codebase by continually refactoring it. We avoid incurring unmanageable amounts of technical debt.

Open Source Tools

We prefer open source tools that we can inspect, evaluate, and improve. We avoid depending on proprietary tools which we have no control over.

Coding Standards

We adhere to strict coding standards to make our code readable and maintainable. We ship our source code as a product, so we make sure it is as well packaged and clean as the app it implements.

Python: PEP8
PHP: PSR-1, PSR-2
Java: Oracle Guidelines
Javascript: ESLint
Objective-C: Apple Objective C Conventions
C#: Microsoft C# Coding Conventions

Automation

We don't waste time on repeatable tasks, everything that can be automated should be automated.

We employ the practices of continuous testing, continuous integration and continuous delivery.

Automation tools: Circle CI, Jenkins, Chef, Capistrano, Docker, Vagrant, Puppet, Chef, Ansible, Salt Stack.

Testing

We are proponents of Test-Driven Development. We write unit, integration and end-to-end tests.

Having tests gives us a level of confidence in the correctness of our products. It helps us find bugs at earlier stages of development and simplifies maintenance.

Unit testing tools: NUnit, PHPUnit, PyUnit, UnitTest, XCTest.
End-to-End testing: Selenium, Appium
Performance testing/profiling: Apache JMeter, Visual Studio Profiling Tools, ANTS Performance Profiler, SQL Server Benchmark Tool, Android Device Monitor, New Relic,Crashlytics.

Version Control

Git is our preferred version control system but we also have experience of working with TFS, SVN and Mercurial.

We choose an appropriate branching model for each new project: our preferred one is Gitflow. We have a shared understanding of a standardised branching and releasing processes.

We write detailed and consistent commit messages. We know why good commit messages matter.

Tools: Github, Bitbucket, Source Tree, Git CLI

Prototyping

Each project starts with a rapid prototyping phase. We don't waste time and money on unneeded development.

We work on the prototype, continuously getting feedback from our clients and revising the prototype. This helps us to identify the initial requirements.

Tools: Sketch, Adobe Photoshop and Illustrator, JustInMind, Invision, Origami and Pixate.

Project Management

We know the importance of effective work management. We always apply our best efforts to complete our work.

We are passionate advocates of the Agile Manifesto. We have a transparent and clear development process.

Tools: Jira, Asana, Redmine and good old pin board.
Methodologies & Frameworks: Scrum, Kanban, XP and TDD.

Learning

We constantly learn a variety of tools and techniques. We do not let unfamiliarity discourage us from using the best tools available. Our internship program helps us to grow skilled professionals.