Development Services

C++ and C development is just the start of the experience we can share and collaborate with on your project. When you discuss your project with us, you're also getting the benefit of our years of experience, trials and successes.

Embedded C & C++ Development

Our primary passion is in developing software and firmware for embedded systems. This primarily covers use of:

  • C & C++ across a wealth of toolchains and environments
  • Python scripting (for both development and test)
  • C# applications for development and test
  • Any other tools appropriate to the task!

We have over ten years experience developing architectures, systesms and modules for embedded devices ranging from SM32 to Arduino, from ESP32 to Raspberry Pi. We've used development environments from the Arduino Editor to Visual Studio Enterprise.

The key to success in all these areas is planning out a proper architecture, using visual tools like UML and in particular flushing out requirements by facilitating constructive conversation about designs and customer needs.

It's a passion of ours to try new things, and generally when we do we write about it in our discussions on this site. In recent times we've been trying out languages like Rust and Golang which are becoming ever more popular for a variety of tasks.

Arduino is a favourite for prototyping and validation before moving to a higher performance environment.
Photo by Harrison Broadbent / Unsplash

DevOps management

Key to the development workflow is proper source code mangement, tracking of work items and planning activities.

In our series covering Continuous Intergation we take a run through the market leaders in this space and evaluate their differences. There are good use cases for all these systems and it largely depends on your needs and expectations from a tool.

Cyclick Development can advise on what tool could be best for your situation. It would be highly unusual for us to start work on a project and not integrate a tool like this - afterall, these tools take care of the repetetive boring stuff and allow more time to be spent on the interesting bits!

Closeup of an embedded circuit running on a development platform.
Photo by Yogesh Phuyal / Unsplash

Further to the DevOps management and toolsets, we have experience deploying web-based environments across DigitalOcean, Microsoft Azure and AWS platforms. The use cases here are often bespoke, whether you need a Lambda function for a calculation or data manipulation, or a fleet of virtual machines there's a solution out there.

Specific devices and use cases

We have experience developing for a variety of devices, with a particular focus on lower powered devices which provide consistent time slicing, interface to sensors and actuators and other critical functionality.

  • Arduino
  • ESP32 development using PlatformIO and similar toolchains
  • ARM Development Studio suite
  • Texas Instruments Sitara Family
  • Design & implementation of EtherCAT 'slave' devices
  • Use of EtherCAT master stacks including Simple Open EtherCAT Master, (SOEM) and the Acontis ECMaster products
  • Intel bare-metal using RTOS (VxWorks, FreeRTOS)

Many of these are simply 'tools' and our knowledge and experience can be applied to a wealth of sitautions. Get in touch today to talk about your specific devices and needs.

Planning ahead through a kanban roadmap. Roadmap prioritization and planning.
Photo by airfocus / Unsplash

The other important aspects

An enduring product will only be successful if the customer is kept at the heart of all your design choices. We're passionate about the Agile methodology - understand what the customer wants, build something that provides the minimum viable set of functionality, and iterate until the product satisfies all their critical needs.

Facilitation of open discussion with customers, key stakeholders, expert users and other knowledge holders is vital to this. Through years of working on large and small projects, we have techniques to pull this knowledge out of your experts in an efficient manner, and ultimately help you build a better product.

At the next level down, once the customers needs are understood, a documented, agreed and workable design needs to be created. The design needs to be something which your developers can understand and buy into and iterate as product maintenance is completed. We use UML modelling to show our design intent, and if needed can document the entire system in this way.

The design practises of strong encapsulation, testability and ease of collaboration are a particular focus. Generally we would expect to create a system with some flavour of automated testing and automated building so that you can perform regression testing and validation on firmware and software.

Development with Agile Scrum

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

This is a quote from the Agile Scrum Manifesto - a working practice central to the way we run projects. Developing software following the Agile Scrum Guide allows us to take the focus away from process and spend more time providing solutions to customer problems and delivering great products.

We have taken courses certified by the Agile Scrum Alliance, and continue to build our knowledge and experience in this area - the learning is never done!