How to Handle Breaking Up With Friends

Have you ever heard some variation of the saying that there are people who come into your life for a reason and a season? This applies for all, and I do mean all, relationships and connections that…

Smartphone

独家优惠奖金 100% 高达 1 BTC + 180 免费旋转




Design and Development of Electronic Products vs Digital Products

I was fortunate to develop and manage the development of both physical products and digital products. As I share the love and passion for both, I thought to present my views and some observations on the differences and similarities between their development processes.

What is a product? Something which is manufactured and sold, or something which creates a value for users? The first definition applies only to physical products and reflects what we do with products and how we build them. The second definition is more open and modern and reflects why we need products. Physical products are tangible; users can touch them, see them, smell them and feel them. We’ve all seen videos of huge factories and we can grasp how expensive and complex it is to manufacture them. Digital products live in the cloud or in remote data centres. It’s harder for us to understand their size, complexity and what it means to build one. For example, if we look at the frontend of Google Search, we can only see one search line, but behind the scene, at the backend, there are hundreds of thousands of servers running and billions of lines of codes.

When software developers started to build digital products, around 25 years ago, they used similar processes and tools which were used to build physical products. The most proven process for project management, at the time, was Waterfall as it guaranteed perfection throughout the project cycle. However as digital project managers gained more experience and failed in almost half of the projects, they realised that they needed a change. They started to build their own tools and came up with their unique unconventional processes. Around 2001, more and more teams started to use Scrum and Kanban and the agile manifesto emerged. Git was created by Linus Torvalds in 2005 which laid the foundation for open source projects. Maybe for digital products perfection is not as important as agility. Today, 25 years later the development processes, the tools and the cultures of both product teams are very far apart.

During the last five years, it got extremely easy and inexpensive to embed electronics in physical products and to connect them to the internet to some kind of an app — a trend which is called IOT (Internet of things). It cost around 2$ per product to do so which explains why we see so many new IOT products emerge recently, some of them are quite amusing… At the product team level, this trend brings together two types of cultures, two types of processes and two types of tools. Whenever two cultures clash, interesting things begin to happen. Open source hardware is all around us now, and some people started to call themselves makers. What is the difference between a maker and a manufacturer? Are we going to see a convergence between these processes? or are we doomed, as CTOs and IOT product managers to bridge between these cultures forever?

I hope you find this blog both interesting and useful and that it will help developers from all across the stack to understand each other’s challenges.

There is a recent trend for software developers to develop the full software stack . This means that they develop both backend code: the code that runs on the server/cloud, and frontend code: the code that runs on the device. They might even take the DevOps role: engineers who are responsible for setting up the system, configuring it, securing it and then automating the change process. It’s not impossible for a single person to build and launch a simple digital app or a game. However, when looking at IOT products which usually include both an electronic device and some kind of an app the tech team requires more skills and roles.

Embedded developers are responsible for the code that runs on the device and board designers are responsible for developing the electronic board.

Although today, with the help of Espruino, Javascript developers can theoretically develop all three levels of code: frontend code, backend code and embedded code, they will probably struggle with industrial and board design which requires completely different types of skills. I’ve seen talented developers who are a jack of all trades, and can move swiftly from modifying CSS classes to writing migration scripts for their databases. Personally, I think that professional developers should master at any point of time at only one layer. It’s not just about having the best skills and techniques or to implement the required functionality, it’s also about what you care about and with which state of mind you do your work.

I’ve made an attempt to describe the responsibilities of each role in the team. I appreciate that I enter a dangerous territory as roles might slightly change in different teams, so please try to see the forest and not the trees.

Why can’t one person care about it all? Because there are tradeoffs and conflicts in product development, and you want to represent each need in a balanced and symmetric way.

Throughout the years I’ve seen respect between different type of developers, but also lack of knowledge. I’ve seen frontend developers who think that backend is easy, and backend developers who think that frontend is boring. I’ve also seen embedded developers who don’t know what REST is. I mentioned before that I don’t believe that professional developers and engineers should master more than one layer. I do, however, strongly believe that they should know what it means to be one and maybe even take a step further and work on a simple project which will expose them to the different challenges and processes. Broad knowledge can help in improving the communication, respect and transparency among the team members, and will also increase the creativity and productivity of the team as a whole.

What is the difference between a project and a product? A project is a plan to reach a certain goal or scope within a certain time and resource constraints. A project has a beginning and an end. If you don’t have a project deadline, you probably don’t manage a project. When the project ends, the product continues to live.

Risk Analysis: Let’s discuss the differences and similarities between project management of a physical product and a digital one. Personally, I like to think of project management as a risk-driven process where I constantly identify the top risks and try to come up with a plan to minimise them. Project risks are anything which affects the success of the project i.e. failing to meet the goal, deadline, scope, cost or the final quality of the products. For digital products, one of the biggest risks is to build a product which users don’t need or like. Digital product managers imagine, believe, speculate and tell a good story, but until users start to interact with the product these are just assumptions. To test the assumption, product managers must ship fast, test their hypothesis and be agile. For physical products, the biggest risk is to find an irreparable problem at a very late stage, after hundreds and thousands of products were already manufactured. Manufacturing requires perfection, and without it the project will fail. To reduce this risk, physical project managers build a review and sign-off process between stages which is called Waterfall.

Every method was designed to reduce different risks, and every project manager should decide on the project plan based on risk analysis. Sometimes individuals and interactions are more important than processes and tools, and sometimes processes are more important. Sometimes working software is more important than documentation and sometimes documentation is more important. Sometimes customer collaboration is more important than written contract. And sometimes a written contract can save your company. Sometimes responding to change is important, but sometimes following a plan is more important. You get what I mean.

Tools and team ceremonies: Project managers should use tools which implement the process by which they want to manage the projects. Microsoft Project is a great tool for waterfall projects. JIRA and Trello are a great tools for agile projects and support processes such as Kanban and Scrum. Whatever the tool is remember that it’s only a tool and not the essence. Teams also have different ceremonies. In Waterfall, teams meet before every fall and review documents, CAD generated outputs or test specifications. Agile team might meet every day for a daily standup and every two weeks for sprint planning. These ceremonies align the team members on the plan and improve the communication among the team members.

Design: Is there a product today where design doesn’t play a major role in its success? What is a product if not something that we want to sell? Something that should be attractive and aesthetics, that we can be proud of. Gone are the days where having the right functionality and performance was good enough. For electronic products, industrial design should take into considerations not only human interaction, usability and customer experience but also the environmental conditions in which the product is being used and the manufacturing process (DFM: design for manufacturing). For digital products, the design should also address the different devices that the software might run on (mobile, desktop, big screens) and all the types of roles and users that interact with it.

Different types of design methodology apply to different types of products: Experience design looks at the product as part of an enjoyable experience that we want to create i.e “We are not selling a game, we are selling a one-hour family experience”. Service design will see the product as part of an end to end service between a service provider and a user. “From the moment that you have decided to travel until you arrive at your destination”, “We are not selling a security camera, we are selling you 24/7 protection”.

Prototyping: With the help of 3D printers and VR/AR technology, it’s extremely easy to come up with a mechanical prototype of your physical product. You can show it your clients, put some stickers on it, connect some wires and LEDs, they will immediately understand its purpose and you might be able to convince them that your product is ready and commercial. You can place it in the real environment and see if it fit mechanically and if it’s easy to hold. You can make ten versions and compare between them and decide on the final configuration. There is nothing more powerful than to give your clients and investors something to hold in their hand. People like toys and tangible things and although the mechanical design is sometimes only 1% of the final product in terms of development time, people will believe that you have already completed 80% of it. With software prototyping it’s not as easy to get to this level. Sketch and InVision are great tools, but users immediately understands that this is not a real product. The data is static and their interaction has no effect on it. This is part of the reason why digital product managers adopted the agile approach and the concept of MVP. It’s very hard to imagine how users will interact and love your product before it’s ready and has real data so you want to ship it as soon as you can and start to collect real feedback.

Physical and Digital Prototyping

Early decisions have the greatest impact: Every time I start a new project, I am excited. What would be the right architecture? which technology will be the best fit for it? Should we choose an 8 bit MCU or a 32 bit CPU? Is this a good project to introduce GraphQL, or shall we stick with REST again? Which wireless technology fits best the use case: Bluetooth 5 or Narrowband IOT? What is the right database to use? PostgreSQL or maybe a graph database this time? These decisions are so important for the success of the project. Sometimes, we make technical decisions too fast without proper analysis and then three months later we regret them, it becomes too hard and painful to change them, and it’s easier to look at the tech investment as an asset and not as a barrier. This is true both for electronic products and digital products, although changing the processor type after shipping your products to your customers is almost an impossible task if not an embarrassing one.

Early decisions have the greatest impact

Development: There are many differences between the development process of electronic products and digital products, and there aren’t many similarities. Most of the development time for a PCB board goes into selecting the right components and designing the layout. Some of the work is purely technical, connecting wires from component U1 pin 120 to component U17 pin 12. And some tasks require complete prototyping around three types of sensors just to measure the noise and power consumption of each one of them. Embedded development is hard to debug and optimise, it’s quite common to see embedded developers using GPIO pins to detect if a function was called and to measure how much time it took to run. Using FPGA in your electronic product is a bold decision but sometimes is the only solution to reach your performance/cost goals. FPGA development is a completely different territory and is somewhere between ASIC development, PCB board development and embedded development. For software developers, most of the time is invested in… writing code. There is something very satisfying in looking at your daily work, all those lines of code, code commits and pull requests. This sounds simple enough, but the amount of code and changes is enormous, so a proper configuration management and review process is essential to keep the code base organised, reducing the technical debt, and increasing the knowledge across the team.

Algorithms, Physics, and Data Science: this is usually the brain of the product, where companies tend to claim their IP is in. Board designers work with physicists to select sensors, to design AFE (analogue front end) around them or to design a special antenna. Embedded developers work with DSP engineers and mathematicians to embed real-time DSP algorithms in their software to filter signals, to detect patterns, or to implement some optimised mathematical formula to process/encode the data. Real-time means that you have to complete the processing within a certain amount of CPU cycles, otherwise you won’t be ready to process the next signal and miss it or won’t be able to output events within the required latency. Backend developers work with data scientists to implement batch processes to recommend new products, find anomalies, suggest friends, train a deep learning model, use NLP to analyse text, score web pages, etc. Frontend developers have all the fun. They are doing data visualisation. With library such as D3JS, they create amazing visuals and present the data to the users in a useful and aggregated manner.

Across the stack these people will care about reducing noise, improving signals and finding the right balance between miss detection (false negative) and false alarm (false positive), they will cry that they need more data or do more experiments, and they will jump happily if they’ll succeed in improving the performance by 5%. An interesting product decision is to decide how to split the data science tasks across the stack. As an example, Alexa includes an array of microphones at the board level, some DSP code at the firmware level and sophisticated data science at the backend level to recognise our speech.

Tools: Imagine a frontend developer and an embedded developer comparing their development tools to each other. The embedded developer will walk the frontend developer to his/her table and point out the differences between a power supply, an oscilloscope and a logic analyser. The frontend developer will then take the embedded developer to the nearest coffee place. They will order coffee and find a quiet place where they can spend a few hours together. She/he will then switch their Chrome browser to development mode and show the embedded developer how to look at the network traffic and how to see the CSS style of a certain HTML element.

What is the meaning of devtools to…

Debug tools vary from developer to developer and using them efficiently is where the real experience lies. Knowing instinctively where the problem is, and using your tools to home in on it is the most important skill of developers. I’ve seen developers spend hours and days debugging a problem, and then ask help from an experienced developer who finds the problem in seconds. I can’t stress this enough, having the right tools for each task is what being professional means. And that’s true for every profession.

What is the meaning of debug and testing tools to…
Software developers find this intimidating

Environmental tests: When we test our product, we want to verify that it functions correctly in all the different configuration and environments that users expect to use it. For physical products, environment usually means temperature (extreme cold, extremely hot), vibration (imagine an automotive product), shock (falls from your hands to a concrete floor), humidity, UV and solar radiation, ESD (these small lightening that comes from electro-static discharge), EMI/RFI, etc. For digital products environment usually means browser type (Chrome, Internet Explorer, Firefox..), OS (Android, IOS, OSX, Windows), Device (Mobile, Desktop, Conference Screen) and Network connectivity level (4G, Wifi, Offline). We normally don’t test on every possible combination as it would be impossible to do so, so we come up with a set of configuration which will hopefully cover enough scenarios to detect issues within the spec of the product.

Reliability/Durability (Life Cycle Test): These are tests that try to simulate what happens to the product during its entire life. It’s more relevant to physical products where materials reach their failing points. There are certain rules which the industry came up with to help us accelerate the product age by exposing it to extreme environmental conditions. Basically, to test if a product functions correctly after five years at room temperature, we can test it at 70 degrees and 10g vibration for one day(example only!!!) . These are called HALT (Highly accelerated life) tests

Extreme conditions Tests (Load, Edge): These are tests that test the behaviour of the product in extreme or edge conditions. For example, if an electronic product works on 5V, we will test it at 4.5V and 5.5V, we might even inject voltage spikes as high as 25V or -5V to see if the product is resilient to user mistakes or electrical surges. For digital products we might challenge input fields with unreasonable values. For examples we might input names which are 1000 characters long, or has meaningless symbols. if we designed the product for a certain load (50 concurrent users), we will test its behaviour under 100 concurrent users. The idea of these tests is mainly to uncover new failure modes. We don’t expect the product to work perfectly, but we might discover important issues, unexpected behaviours or bottlenecks that are relevant also to normal conditions.

Compliance / Security Tests: Both types of products are required, sometimes, to meet standards and be compliant with them. Electronic products need to be safe, secure and reliable and protect the user against electrical shock or overheating (UL, CE, FCC..), they also need to comply with certain wireless standards like Wifi or Bluetooth. Digital products which handle Personally identifiable information (PII) such as credit cards numbers (PCI, ISO/IEC 27001, NIST) or social security numbers (GDPR) must protect the data against all sort of attacks and employees negligence. For both products, the compliance process is expensive and long, but there are ways to reduce the cost and use pre-approved modules and services.

What is the meaning of compliance to…

Test Coverage: As a board designer you can never be sure that the manufacturing process was without defects. In some cases, there are tiny shorts between adjacent traces that you can only see with a microscope. In other cases, electronic components are not reliable enough or might even be counterfeit components. As part of the quality process, board designers and embedded developers must work together to write testing tools that verify that every connection and every component work as expected with 100% coverage. I‘ve worked on testing JIGs that simulate every sensor and every input to the board to reach 100% coverage. It’s also a good practice to run these tests in parallel with highly accelerated screening tests (HASS) where the board is exposed to vibration and thermal cycles.

Similarly, with software, a good practice is to write testing code that covers at least 99% of your code. Before deploying new code to the production environment an automation tool runs the testing code suite and verify that what ever worked before, is still working. For both cases working on these testing tools should start together with the product development (sometimes even before: TDD) and should be resourced appropriately.

Design/Code review: People make mistakes. Anyone who thinks they don’t, are either not experienced enough or have a short memory. In particular, when designing the layout of a PCB board and placing new components, it’s extremely easy to make mistakes regarding the pinout configuration and physical dimensions of the new components. mistakes you will only find weeks or months later. You can look at the design, and verify it against the datasheet, look again, and verify again, and in both cases, you will miss it. For this reason, an independent review and sign-off are a standard practice in electronic product development. Software developers often make mistakes with regard to security. For example, they often put sensitive keys in public code repositories or exposed to the client. Pull request is a method of letting other team members know about your changes before you commit them. They serve multiple purposes: To detect defects and issues, to improve the readability and documentation of the code, and to share knowledge across the team. Pair programming is another method which is used by software developers to share knowledge and to review each other’s code.

Configuration Management: CM is the practice of handling changes systematically. It is used to document versions of the product and to track changes that applied to it between versions. A good configuration management system will allow you to build and test any version of the product using only the artefacts that are in it without any other external knowledge. DevOps engineers use SCM (Software configuration management) tools like GIT, Ansible, Terraform, Chef to record the code, configuration and infrastructure of the product. They might also tie these changes to JIRA issues to document the relationship between the bug/defect/feature request and the actual changes that resulted from it. Electronic engineers use tools which are called sometimes PLM (product lifecycle management) and sometimes HCM (hardware configuration management). Essentially they serve the same purpose, but they include different integrations and processes. For example, a PLM system might also integrate into your ERP system to show which parts of the product’s BOM are present in your inventory.

You should look at your manufacturer as your partner and not as your supplier. After all, you give your manufacturer your most sensitive assets: everything which is needed to build your product! Your manufacturer will help you to introduce new manufacturing methods, reduce defects, improve the efficiency of the process and in some way will share some of the risks and rewards of the product.

Lean Lean is everything relating to saving cost. For physical products, lean means:

For Digital products lean means:

Manufacturing Pipelines: Setting up an assembly line is not too different from setting up a software CI/CD (Continuous integration / Continuous delivery) pipeline. If you’ve read the Phoenix project book, you will probably remember how some of the concepts of lean and DevOps were derived in the book from the physical manufacturing line. Both pipelines handle everything which is required to build, test and ship your product. As you add more automation, you can ship faster. For electronic products this means reducing costs and defects and improving capacity, for digital products, this means faster user testing and adaptive design.

Worldwide delivery: There is an interesting similarity between content delivery networks (CDN) which are used to deliver web assets to users based on their geographical location, and how manufacturing is distributed around the world to reduce shipping costs and to localise products. Content caching can be seen as local warehouses or fulfilment services such as Amazon. For both types of products, local presence improves the overall customer experience across the world

It might seem that worldwide presence is harder for physical products, however, data protection regulation and language localisation require significant effort as well

Cloud services: Cloud services are awesome, you can build your digital product in seconds by choosing from hundreds of web services. A few clicks and it will run automatically on more than 20 data centres around the world and scale based on the demand. There is nothing like that in manufacturing but this might be the next industrial revolution. Imagine a digital product where you can set up a manufacturing pipeline using preconfigured modules such as 3D printing, PCB manufacturing, component sourcing, board and cable assembly, running tests and shipping directly to your clients from a local automated manufacturing floor. Moreover, the service will allow the end user to customise the colour of the product, the shape and other personalisation features. This seems like a dream, but I am sure that somewhere around the world Amazon is working on such a service (At least I hope they do).

There are many differences between the development process of electronic products and digital ones, but looking at it from a perspective of 20 years, It’s amazing to see how many of the design principles and processes of digital products are now used by physical product managers. AWS has announced recently on FreeRTOS for embedded systems. I predict that in 10–20 years there won’t be any significant difference between the development process of a digital product and a physical one.

If you would like to find out more about my journey, and how to manage a team which lives in both worlds, feel free to reach me out directly.

Add a comment

Related posts:

Find Simple Transportation Services to and From North Macedonia Airport

Could it be said that you are arranging an excursion to North Macedonia and looking for solid transportation choices to and from the airport? Look no further, as we take care of you with the best…

How Meditation is the Newest Employee Benefit

Forget about hip cafés in the office, company cars, and gym memberships, the best company perk might be something a little simpler. As meditation increases in popularity, many employers are taking…

Fashionista Cases for Her

While we try to add new designs every week to cater out to all unique choices of our happy customers, this week we decided to add an entire new category of designer cases with a focus on fashion and…