Software Development

From transformative digital solutions to full-stack development and shipping

Mobile App Development (Native or Flutter)

iOS and Android, the two most prominent mobile platforms, have changed dramatically over the years.

iOS development was originally based on Objective-C, a language it shared with macOS. These two platforms differed mainly in their application frameworks: UIKit for iOS, and AppKit for MacOS. Apple has since shifted focus to Swift as the programming lingua franca for iOS and macOS. Android on the other hand, followed a similar path, starting from Java and eventually moving to Kotlin as the preferred development language. All of these changes were at least in part undertaken to support modern programming language features such as rich enums, tuples, and modern control flows, which enables more maintainable and secure software.

The steady divergence and evolution of mobile app development makes the maintenance of an app on two different platforms an increasingly difficult challenge. This has led to the rise in various cross-platform mobile application development frameworks like Ionic, Xamarin, React Native, and now Flutter. Flutter is a cross-platform application development framework on top of the Dart programming language, mainly focusing on iOS and Android but support for web and desktop is rapidly growing.

We have have been developing mobile applications for more than 10 years now, using various platforms and frameworks: Objective-C/UIKit, Cordova with Angular, ReactNative, and finally Swift for iOS, and Java, Scala, and Kotlin for Android.

More recently, we have been developing Flutter mobile applications for clients that want to support Android and iOS with a single highly maintainable and performant codebase.

We have also traveled off the beaten path and can work with other mobile platforms. In years gone-by, we created Pipeline, the first Dropbox Client for now-discontinued Samsung Bada mobile platform.

C, C++, and Low-level Development

C and C++ has been the bread and butter for native development on Windows, Linux, and embedded platforms (though Rust has been making headways into this area). The low-level nature of C and C++ allows us to interface directly with the operating system, making access to hardware resources such as memory and peripherals more straightforward than though higher-level languages such as JavaScript. Moreover, since the resulting binaries from these languages run directly on the CPU without intermediate processing (like through an interpreter or virtual machine), the programs usually also run faster.

We have experience in working with the Win32API, WxWidgets, Qt GUI framework, and graphics API such as OpenGL and DirectX by virtue of creating games when we first started this business.

Recently, we have used C++ on the more performance-intensive parts of such as map-matching for GPS processing.

Enterprise Resource Planning (ERP) for Digital Transformation

Any business (or enterprise) has resources that must be managed and processes that must be tracked. For example, you have purchase orders, sales, and deliveries that affect inventory, or hiring, salaries, and promotions that affect your employees. All this management causes overhead that distracts businesses from their core function and this is where Enterprise Resource Planning (ERP) helps businesses operate more efficiently by digitizing processes and helping you track resources.

Ideal for:

Small businesses on a budget

Process tracking and documentation

Resource planning and forecasting

There are numerous ERP solutions out in the wild catering to businesses of different sizes. While SAP and Oracle cater to multi-nationals, we chose an ERPnext, a solution that caters to Small and Mid-sized Enterprises (SME) with a simpler interface and lower operation cost compared to its heavyweight cousins.

Full-Stack Web Development

Web development is a complex landscape comprising multiple technologies put together. What was once just simple CSS, JavaScript (ECMAScript), and HTML has exploded to multiple technologies that attempt to increase developer productivity and enable complex features that was difficult or impossible to do before. This is in conjunction with the increased demand for interactivity (web apps vs website) and form factors (Desktop, Mobile, Tablet, and TV).

We are flexible in the web stacks that we use and rely on client preference on which to use. We have dealt front end code bases in Vue, React/NextJS, vanilla JS with JQuery, Flutter, and ClojureScript with Luminus ( web runs on this). For the backend, we have worked with Go, Java, C#, JavaScript (NodeJS), Python, and C++. API communication usually uses REST but we have used GraphQL and gRPC (which uses Protobuf).

That said, our go-to stack has been Go for the backend, PostgreSQL for the database, REST for communication (with a bit of GraphQL thanks to Hasura), and React or ClojureScript for the frontend.