Embedded Software Development


New technologies emerging across all sectors and areas of life are a direct result of advancements in embedded software. Embedded software development is one of our core competencies.

Our capabilities include a wide range of embedded solutions from single-processor to multi-processor control applications. With more than 30 years of experience developing embedded software solutions, we understand the technical and business issues of your system and can develop embedded software to run reliably and with high performance on your chosen hardware.

As highly experienced developers of embedded systems and IoT solutions, SanCloud has a track record of meeting the demand for reliable, secure and readily manageable embedded software solutions, delivered quickly and at reduced cost. We offer an end-to-end embedded capability, encompassing phases for build, connection and management. Our software development capabilities include real-time embedded code development, high and low level languages, autocode and algorithm development.

Whether your requirement is for customised embedded solutions, proprietary design or off-the-shelf alternatives, we offer a range of embedded software services to deliver a fully functional system. SanCloud aims for long term relationships with its customers. Our embedded software development services include:

Design, development & maintenance of automotive & industrial control software

Embedded applications such as GUIs, middleware and protocol stacks

Developing device drivers and board support packages

Software & application porting across different operating systems & platforms

Software optimisation, feature enhancement & performance tuning

Maintenance and support for existing products

With software being a complex product that is developed and delivered through a series of steps. Like all products software starts as an idea. The idea then becomes a document, or perhaps a prototype, depending on the method in use.

Whether a document, diagram, or working software, the artifact created in one step becomes the input to the next step. Eventually, the software is delivered to the customer. The sequence of steps used by these methods is commonly referred to as the Software Development Lifecycle (SDLC.)

1. Planning

The planning phase involves aspects of project and product management. This may include:

  • Resource allocation (both human and materials)
  • Capacity planning
  • Project scheduling
  • Cost estimation
  • Provisioning

The outputs of the planning phase feed into the analysis phase. Ideally, Project Managers and Development staff collaborate with Operations and Security teams to ensure all perspectives are represented.

2. Analysis

The business must communicate with IT teams to convey their requirements for new development and enhancement. The requirements phase gathers these requirements from business stakeholders and Subject Matter Experts (SMEs).

Architects, Development teams, and Product Managers work with the SMEs to document the business processes that need to be automated through software.

The output of this phase in a Waterfall project is usually a document that lists these requirements.

Agile methods, by contrast, may produce a backlog of tasks to be performed.

3. Design

Once the requirements are understood, software architects and developers can begin to design the software. The design process uses established patterns for application architecture and software development. Architects may use an architecture framework such as The Open Group Architecture Framework (TOGAF) to compose an application from existing components, promoting reuse and standardisation.

Developers use proven Design Patterns to solve algorithmic problems in a consistent way. This phase may also include some rapid prototyping, also known as a spike, to compare solutions to find the best fit. The output of this phase includes:

  • Design documents that list the patterns and components selected for the project
  • Code produced by spikes, used as a starting point for development

4. Software Development

This phase produces the software under development. Depending on the methodology, this phase may be conducted in:

  • time-boxed “sprints,” (Agile) or may proceed as a;
  • a single block of effort (Waterfall)

Regardless of methodology, development teams should produce working software as quickly as possible.

Business stakeholders should be engaged regularly, to ensure that their expectations are being met.

The output of this phase is testable, functional software.

5. Testing

The testing phase of the SDLC is arguably one of the most important. It is impossible to deliver quality software without testing. There is a wide variety of testing necessary to measure quality:

  • Code quality
  • Unit testing (functional tests)
  • Integration testing
  • Performance testing
  • Security testing

The best way to ensure that tests are run regularly, and never skipped for expediency, is to automate them. Tests can be automated using Continuous Integration tools.

The output of the testing phase is functional software, ready for deployment to a production environment.

6. Deployment

The deployment phase is, ideally, a highly automated phase. In high-maturity enterprises, this phase is almost invisible; software is deployed the instant it is ready. Enterprises with lower maturity, or in some highly regulated industries, the process involves some manual approvals. However, even in those cases it is best for the deployment itself to be fully automated in a continuous deployment model. 

Application Release Automation (ARA) tools are used in medium and large-size enterprises to automate the deployment of applications to Production environments. ARA systems are usually integrated with Continuous Integration tools.

The output of this phase is the release to Production of working software.

7. Maintenance

The operations and maintenance phase is the “end of the beginning,” so to speak. The Software Development Life Cycle doesn’t end here.

Software must be monitored constantly to ensure proper operation. Bugs and defects discovered in Production must be reported and responded to, which often feeds work back into the process.

Bug fixes may not flow through the entire cycle, however, at least an abbreviated process is necessary to ensure that the fix does not introduce other problems (known as a regression.)

8. Customer Delivery & Feedback

Continuous improvement is a vital part of the software development process. 

Without feedback from the customer future iterations cannot be properly specified and implemented.

Planning an Electronics Software Project?

SanCloud can help. Contact a SanCloud specialist…