Reducing time-to-market in embedded systems development – 11 suggestions
#timetomarket, #embedded development, #good practices, #embedded complexity
Reducing time-to-market is a target for all of our clients. Typically we cooperate with clients who deliver innovative solutions and are chasing their competitors to deliver best value for their clients as fast as possible. Some of them want to be first on the market, as that allows them to have the biggest bite of the market share.
With the growth of complexity and importance of the embedded systems (McKinsey 2022 report – rising complexity, increased automation and connectivity, technology constraints, compatibility demand), we have to look for development process optimization and speed up.
What do we do in Embevity, to make the process of product development faster?
Executive summary – 11 points worth implementing:
- Automation and best practices
- Tracking, reducing and dropping requirements with the most experienced team members
- Reusing – as much as you can – code, architecture, platforms, technology, solutions, concepts, experience
- Test – as soon as possible
- Agile development with quick prototyping and the right team structure, tracking time and progress
- Using the right tools
- Fast communication and decision log
- Telling the client how the process will look like
- Prioritize and focus – reduce complexity, deliver MVP first, minimize requirements
- Keeping the team engaged – motivation, values, perseverance, being informed
- Keeping the core of the project team stable
The list of the above points is something we are aware of in Embevity and are constantly improving. Below we look at a bit of the details of each of the points.
1. Automation and best practices
We maximize our efficiency by replacing repeatable manual jobs that tend to consume lots of time with automated procedures. That mainly involves test execution targeting products regression coverage checks but automation also drives our CI/CD pipelines, build systems, versioning, and release management.
It is crucial to implement best practices. In Embevity we converted our experience into a set of rules and guidelines used in everyday work in order to mitigate potential project risks. That involves coding standards, design verification, or an internal work review process.
2. Tracking requirements
It is important for the Tech Lead, CTO and PM to track the requirements of the system and their complexity that will add up to the time-to-market. Requirements can change and so can their priorities. The most experienced people have to be involved so the risk of entering dead ends is minimized. Requirements delivery time, cost, quality and overall system complexity needs to be constantly monitored during the development process. Very often, in the process of prioritization, some of the requirements will be reduced or even dropped.
The possibility of deliverables reusage grows with experience and the number of delivered projects. Gaining experience on various platforms allows us to speed up the process of new development. We reuse architecture, code, platforms, technology and even concepts to tackle problems, which have a common root. However, reusing has an important limitation, which is our Clients right to the Intellectual Property. And we have to protect it. Nevertheless, we never had a situation where this would become a problem. As longs as our Clients can keep the competitive advantage and not interfere with each other, we can reuse parts of deliverables and experience.
To keep the quality high we think about testing the deliverables at the very beginning. At the specification definition level we urge the clients to define the UAT’s so then we know when done is done. We have been creating a QA and testing environment since the beginning of Embevity carrying experience from our previous years.
We have combined the Waterfall and Agile development process management strategies. We create a WBS in the beginning and track its completion. However, we use some of the tools and methodologies that are used in Agile approach – Jira, Confluence, standups, daily’s, retro’s etc. That process allows us to better control the deliverables and verify the solutions much quicker. We track the development time, the budget and progress regularly.
We choose the tools which are adequate for our needs. That involves design, development, testing, and project management. The design tools allow us to boost our productivity and deliver results quickly and on time. Testing frameworks together with static and dynamic analyzers allow us to find problems and vulnerabilities long before our work gets deployed.
7. Fast communication and decision log
We are a small company with a committed group of developers and managers. Transparent and quick communication is vital for quicker and effective project completion. We use various tools and keep the bureaucracy to the necessary minimum. Decisions are made quickly and are tracked in our decision log.
8. Process transparency
We keep the development process transparent in 2 ways. First, we inform the client what will it take to create the final product. There is a significant group of hardware-based startup companies, that are not aware of what needs to be done, to be ready to release a product to the market. Second, we inform the clients on regular basis about any problems that we encounter during the development process. This way we keep surprises to the minimum and we can quickly adapt to a new situation together with the client.
9. Focus and priorities
Ideas a very often complex and the complexity of the embedded systems is also growing, so prioritizing is a must. A good old MoSCoW method should be exercised with the client so the most important things are delivered first and requirements are minimized. A fast MVP (Minimum Viable Product) or better yet an MLP (Minimum Lovable Product) needs to be delivered as quickly as possible, so the client can monetize his idea. We keep our focus on the most important part of the development. During the research stage we quickly identify the potential show-stoppers.
10. Team engagement
Keeping the team engaged is vital especially when the going gets tough. We keep the whole team informed about each project and the overall situation in the company. When problems appear we show our perseverance and mobilize to work harder. We share the passion for innovative product delivery and that keeps us going.
11. Stable team core
Although we allow for development team composition variations during the project, we keep the core stable. That includes the Lead Tech Engineer and key developers. This way there is no risk of loosing the precious development momentum.