Software Development that
Enables your Ambitions
While we are happy to undertake stand-alone small or large software projects, we believe that the best outcomes are arrived at by taking a system-level approach towards software development, starting with building a solid foundation of requirements and elaborating towards a concrete design and implementation.
Our Approach
We understand that requirements can and often do change which is why we believe it is even more important to have solid foundations so as to understand and manage the impact of change. We do this through the proactive management of our software development activities and an underpinning of well-established working practices that provides high levels of traceability and confidence in a successful outcome.
We also recognise that software development is a dynamic discipline with rapidly evolving application areas and technologies which is why we invest our own time and energy in keeping our skills "on point" through our own research and development activities. We believe in pragmatism over dogmatism and will readily evaluate different approaches to problem solving and also engage in prototyping and proof of concept work to manage risk and complexity where necessary to do so.
We believe in ensuring that our clients and stakeholders are engaged in the software development we do. We accomplish this by discussing your expectations from the outset so as to tailor our communications to fit your needs, no matter what your technical background.
Software Application Areas
We have applied our software development expertise in many different application areas using many different technologies. Below is a summary of the most relevant areas we have worked in, but please do contact us if you have a specific area in mind that we have not mentioned and you would like to discuss.
Embedded Software
We have developed embedded software using C, C++, Python and Micropython on platforms ranging from small single core microcontrollers to multi-core systems-on-chip. We have extensive experience developing software that is bare metal or using an RTOS (FreeRTOS, ) or an embedded Linux (Buildroot, OpenEmbedded, Raspbian, Debian, Ubuntu) and delivered numerous projects using ST Micro, Nordic Semiconductors, Atmel/MicroChip and Freescale/NXP devices.
We strongly believe in unit testing our software, even for embedded devices, and have well-established workflows allowing us to develop and test embedded software without access to hardware as is often the case when developing new products..
Communications Protocols
We have both a deep theoretical and practical understanding of all manner of communications protocols, including wireless protocols. We have developed software to both provide and utilise protocols as follows:
- CAN bus & EtherCAT especially in automotive applications & for motor control
- USB, I2C, SPI & proprietary bus protocols
- Internet family of protocols including UDP, TCP, HTTP, FTP, RTP, MQTT, WebSocket
- WiFi
- Bluetooth & Bluetooth Low Energy
- 2G/3G/4G/5G from PHY to L3
- Narrowband long range radio using Dash-7, SigFox, LoRaWAN & also proprietary protocols
- Near-field radio such as NFC & TransferJet
We also have experience in protocol design, modelling and simulation using frameworks such as NS-3, Matlab and Python.
Cloud Computing
We have leveraged multiple cloud computing vendor platforms predominantly to provide high-availability and ultra-reliable IoT backend infrastructure as part of a wider system offering. Our work has typically involved developing both client-side and server-side software (e.g., using Python) to provide:
- Automation and simplification of IoT device provisioning
- Data processing pipelines that can both sanitise and extract information of interest from disparate data sources
- Reporting and metrics dashboards including location mapping
- Remote firmware and configuration updates of IoT devices
We also have experience with open source frameworks such as Traccar, which is widely used for remote position tracking of IoT devices.
When required, we leverage cloud computing to accomplish massive parallelisation and decomposition of multi-faceted simulations that can run in hours/days which would otherwise take weeks/months to execute.
Computer Vision & Artificial Intelligence
We have developed functional prototypes and applications using OpenCV in C++ and Python to solve real-world computer vision problems running on embedded platforms and mobile phones with cameras. We have additionally combined computer vision feature extraction techniques with deep learning (AI) to perform identification tasks.
User Interface
We have developed both single-platform user interfaces (Android) and cross-platforms user interfaces using HTML5, Websocket and JSON designed to run on mobile phones, tablets and PCs. These services are typically provided as part of a wider system offering and in conjunction with the above application areas.