Episodit
-
The episode discusses the concept of Minimum Viable Continuous Delivery (Minimum CD), which represents a counter-movement to heavyweight frameworks like SAFe. The hosts explore how Minimum CD provides a set of essential practices for successfully building software-based products without unnecessary complexity. The approach focuses on core principles rather than rigid frameworks, making it particularly relevant for embedded systems development.
The discussion covers the fundamental requirements for continuous delivery, including automated testing, pipeline-driven deployments, and trunk-based development. The hosts emphasize that while these practices may seem challenging for embedded systems, they become increasingly important as devices become more sophisticated and connected.
A key theme throughout the episode is the importance of building trust in the development process through automation, consistent practices, and cultural commitment. The hosts stress that while some practices may seem difficult to implement in embedded systems, the more challenging they are, the more valuable they become when successfully implemented.
Timestamps and Topics:
00:00:00 - Introduction and overview of Minimum CD
00:02:00 - Discussion of Minimum CD as counter-movement to complex frameworks
00:03:45 - Continuous Integration fundamentals
00:15:35 - Pipeline as the only way to deploy
00:27:00 - Production-like test environments
00:29:45 - Rollback capabilities for connected devices
00:32:25 - Configuration deployment with artifacts
00:34:50 - Trunk-based development principles
00:39:30 - Automated testing requirements
00:41:10 - Maintaining delivered work integrity
00:45:55 - Wrap-up and closing thoughtsShownotes:
Link to minimumcd.org: https://minimumcd.org/
Reference to Brian Finster as instigator of Minimum CD
Reference to Raymond Chen's blog about Windows backward compatibility
Reference to previous episode on trunk-based development
Reference to interviews with Philip Johnston from Embedded Artistry
Reference to interview with Francois from Mend Fault
Link to Agile Embedded Slack groupYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Key Topics
* [03:00] Ryan's background in offensive cybersecurity and defense contracting
* [04:30] The mindset and challenges of vulnerability research and hacking
* [09:15] How security researchers approach attacking embedded devices
* [13:45] Techniques for extracting and analyzing firmware
* [19:30] Security considerations for embedded developers
* [24:00] The importance of designing security from the beginning
* [28:45] Security challenges for small companies without dedicated security staff
* [33:20] Address Space Layout Randomization (ASLR) and other security measures
* [37:00] Emulation technology for testing embedded systems
* [45:30] Tulip Tree's approach to embedded system emulation and security testing
* [50:15] Resources for learning about cybersecurity and hacking
Notable Quotes
> "When you're on the vulnerability research side, you're trying to find a time when the software does something wrong. When it does something unexpected." — Ryan Torvik
> "Don't roll your own cryptography. Use a standard library for cryptography." — Ryan Torvik
> "We're seeing that the maintenance costs are what are getting people now. You're expected to maintain this device, but now you got to be able to actually update the device." — Ryan Torvik
> "It's so much more expensive to put security in after the fact if it's possible in the first place. Why is that even something that needs to be debated?" — Luca Ingianni
Resources Mentioned
[Tulip Tree Technology](tuliptreetech.com) - Ryan's company focused on embedded system security and emulation
* IDA Pro - Interactive disassembler for firmware analysis
* Binary Ninja - Interactive disassembler from Vector35
* Ghidra - NSA's open-source software reverse engineering tool
* Microcorruption - Beginner-friendly CTF challenge for learning embedded system hacking
* National Vulnerability Database - Public database of security vulnerabilities
Things to do
* Join the Agile Embedded Podcast Slack channel to connect with the hosts and other listeners
* Check out Tulip Tree Technology's website for their emulation tools and security services
* Try Microcorruption CTF challenges to learn about embedded system security vulnerabilities
* Consider security implications early in your design process rather than as an afterthought
* Use secure programming languages like Rust that help prevent common security issues
You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Puuttuva jakso?
-
Key Topics[02:30] Definition of BDD as an additional layer of discipline on top of TDD[03:15] Common pitfalls of TDD, including testing to implementation and brittle tests[08:30] The structure of BDD tests using Given-When-Then format[12:00] Applying BDD at different levels, from unit tests to system tests[15:45] Using test doubles and spies for hardware interactions in embedded systems[22:30] Testing state machines with BDD[27:00] Off-target testing and hardware abstraction layers[33:00] Why BDD isn't more widely used in embedded systems[36:30] Using code coverage as a signal rather than a goal metric[39:00] Overcoming the learning curve and maintaining discipline in BDDNotable Quotes
"BDD is an additional layer of discipline on top of TDD. Dan North's goal was to get straight to the good stuff of TDD without getting into the pitfalls." — Steve
"The key thing that BDD does by saying we're going to focus on behavior is you look at the API that you've written and you say, what can I do through the public API to affect this, to check the results and so forth?" — Steve
"By having abstraction layers, you create your thin layer that's substitutable with either the real code on target, or with a test double off target." — Steve
"Code coverage as a goal metric is not a good thing. Rather than using code coverage as just this almost dimensionless metric, use it as a signal to guide you." — Steve
"By adhering very strictly to the simple rules of how to do BDD, by forcing yourself to the discipline of that strict adherence, it keeps you on track." — Steve
Resources MentionedJames Grenning's bookSteve's blog postEmbedded Online TalkIan Cooper's videoYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
John Taylor returns to the podcast to discuss his new book "The Embedded Project Cookbook", co-authored with Wayne Taylor. The book serves as a practical guide for embedded systems development, providing recipes and techniques that John has refined over his 30+ year career. Unlike his previous book "Patterns in the Machine" which focused on software engineering best practices, this new book takes a more hands-on approach to project mechanics - from requirements gathering through release.
The book provides opinionated guidance on setting up project infrastructure, managing requirements, software architecture, and release processes. While organized in a waterfall-like structure for clarity, it emphasizes the need for agility in embedded development. A key theme is establishing good practices early to make releases boring and predictable rather than chaotic.
The content is valuable for different roles - from junior developers seeking context about the full development lifecycle, to technical leads implementing processes, to managers needing justification for development infrastructure investments. While the book presents John's specific approaches, he emphasizes that teams can adapt the recipes to their needs as long as they deliberately address the underlying challenges.
Key Topics Discussed (Timestamps):
00:00:00 - Introduction and background on John Taylor
00:02:00 - Comparison to previous book "Patterns in the Machine"
00:06:00 - Target audience and use cases
00:15:00 - Software Development Plans and their value
00:20:00 - Foundation setup before coding begins
00:27:00 - Managing project variants and configurations
00:30:00 - Communication and collaboration practices
00:35:00 - Release management and ongoing development
00:40:00 - Iterative development cycles
00:43:00 - Book availability and contact informationLinks:
Embedded Systems Cookbook: https://link.springer.com/book/10.1007/979-8-8688-0327-7
Patterns in the machine (the previous book): https://link.springer.com/book/10.1007/978-1-4842-6440-9
John's LinkedIn: https://www.linkedin.com/in/john-tanner-taylor/You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
In this episode, Jeff and Luca discuss trunk-based development, a software development practice where developers merge their work into the main branch (trunk) frequently - at least daily. They explain how this approach differs from traditional branching models like GitFlow, and address common objections and concerns. The hosts emphasize that while trunk-based development may seem risky, it actually reduces risk by exposing integration problems early and forcing teams to implement good engineering practices like automated testing and feature flags.
The discussion highlights how trunk-based development acts as a "forcing function" that encourages better development practices, smaller changes, and more frequent collaboration between team members. They explain that while this approach originated in web development, it's equally applicable to embedded systems. The hosts cite research from the book "Accelerate" showing that trunk-based development is a predictor of high-performing software teams.
The episode concludes by emphasizing that most objections to trunk-based development actually point to underlying process issues that need to be addressed, and that the benefits of early integration and feedback outweigh the perceived downsides.
Timestamps:
00:00:00 - Introduction and topic overview
00:03:00 - Basic version control concepts and branching
00:08:00 - Definition and principles of trunk-based development
00:13:00 - Feature flags explanation and implementation
00:20:00 - Common objections to trunk-based development
00:27:00 - Application to embedded systems
00:34:00 - Benefits of trunk-based development
00:40:00 - Impact on team dynamics and collaboration
00:47:00 - Research backing and evidence from "Accelerate"Shownotes / Links:
MinimumCD: https://minimumcd.org/
Accelerate: https://www.goodreads.com/book/show/35747076-accelerate
The nvie branching model: https://nvie.com/posts/a-successful-git-branching-model/You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
The episode features a discussion with Mitch English, a product development team lead at Inertia, about using the QP (Quantum Platform) framework for embedded systems development. Mitch and Jeff recently collaborated on a medical device project where they successfully implemented QP. The framework, created by Miro Samek, implements the actor model with active objects running in their own threads and communicating via messages. This approach helps avoid common concurrency issues found in traditional RTOS implementations.
The discussion covers how QP's hierarchical state machine framework makes it easier to manage complex state transitions and system behaviors. They share their experience using QP on a blood analyzer project, discussing how they structured the code with different layers of abstraction and maintained multiple test builds throughout development. The team found that QP's architecture helped make the system's complexity more manageable and testable.
A key learning they shared was about event communication - while they initially used direct posting between active objects, they later realized that using the publish-subscribe pattern more extensively would have made testing easier and the system more flexible. They recommend starting with QP's simple examples and gradually building up complexity rather than trying to implement complex examples right away.
Key Timestamps:
00:00:00 - Introduction and background
00:03:00 - Overview of QP framework and actor model
00:06:30 - Discussion of hierarchical state machines
00:19:30 - Project architecture and implementation approach
00:27:00 - Testing strategies and development process
00:30:00 - Team structure and collaboration
00:35:00 - Hardware/software integration
00:39:00 - Advice for getting started with QP
00:41:50 - About Inertia and contact informationLinks:
Miro Samek's QP framework: https://www.state-machine.com/products/qp
Miro's book on QP framework: https://www.state-machine.com/psicc2
QP GitHub repository with example code: https://github.com/QuantumLeaps/qpc-examples
Inertia website: http://www.inertiapd.com/
Mitch English LinkedIn: https://www.linkedin.com/in/mitchellenglish/You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
https://youtu.be/Zwo1aTElfis
You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Bryan Finster's episode on Luca's DevOps podcast. part one: https://open.spotify.com/episode/26cnxrZEWhQRxY3jkwQTb8?si=Fj3VtirDRU-l2xQAomrWUw
Bryan Finster's episode on Luca's DevOps podcast. part two: https://open.spotify.com/episode/36U6glqDPuvkpPwrdD8Axv?si=8T9isqUHS6WBh1aQyZEXGA
Scaled Agile DevOps Maturity Framework (SADMF), a SAFe parody: https://scaledagiledevops.com/
Klaus Leopold's Flight Levels framework: https://www.flightlevels.io/You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
In this episode of the Agile Embedded Podcast, we are joined by Mark VanderVoord and Michael Karlesky, creators of the open-source tools Unity, CMock, and Ceedling, which help developers unit test C code. Mark and Michael share their journey of creating these tools, their experiences as open-source maintainers, and insights into the evolving landscape of embedded systems testing.
The discussion covers the origins of their tools, the challenges of maintaining open-source projects, and the different needs of various embedded development communities. We also explore the gaps in current testing tools, particularly in system and integration testing for embedded systems. The episode concludes with exciting news about the upcoming Ceedling 1.0 release and the launch of Ceedling Pro, a new commercial support offering.
Key Topics Discussed:
Origins of Unity, CMock, and Ceedling (3:00)Challenges of open-source maintenance (14:30)Barriers to entry for test-driven development in embedded systems (9:15)System and integration testing tools for embedded systems (28:00)Use of simulators and emulators in testing (37:30)Changes in embedded development communities over time (41:30)Upcoming Ceedling 1.0 release and Ceedling Pro launch (52:00)Notable Quotes:
"The tools were really easy to develop in the first place. Unity is a very simple thing, and some people just use that without any of the rest of our tools. So the tool concept is not that hard. The thing that's hard, I think, for people getting into test-driven development or even test after is, more conceptual, like what do you test and how do you test it and what's worth doing and what's not." - Mark VanderVoord (10:15)
"GitHub as a tool is amazing. And also there's a couple, I love that they have all these metrics for like contributing to projects and stuff like that. And that really motivates some people, but also that occasionally gets in our way because as Mike said, the easiest path isn't always directly merging something and then they don't get credit for." - Mark VanderVoord (21:30)
"Arduino actually cured me of my hatred for C++. I, for a long time, despised C++. I just, it was just so stupidly complicated and arcane and just a junk drawer of software concepts." - Michael Karlesky (47:30)
Timestamps:
0:00 - Introduction and guest introductions
3:00 - Origins of Unity, CMock, and Ceedling
9:15 - Barriers to entry for test-driven development in embedded systems
14:30 - Challenges of open-source maintenance
28:00 - Discussion on system and integration testing tools
37:30 - Thoughts on simulators and emulators in testing
41:30 - Changes observed in embedded development communities
47:30 - Arduino and its impact on C++ perception
52:00 - Upcoming Ceedling 1.0 release and Ceedling Pro launch
55:30 - Closing remarks and contact informationFor more information about the topics discussed, visit throwtheswitch.org or reach out to Mark and Michael directly.
https://www.linkedin.com/company/100875285/
[email protected]
[email protected]
www.throwtheswitch.org
www.github.com/ThrowTheSwitch/CeedlingYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Discussing Modern Development Techniques in Embedded Systems
In this episode of the Agile Embedded Podcast, hosts Jeff Gable and Luca Ingianni play buzzword bingo, discussing various modern development techniques, tools, and methodologies in the context of embedded systems. They explore the relevance and applicability of terms like microservices, serverless, Kubernetes, Docker, continuous integration, continuous delivery, continuous deployment, A/B testing, API-first design, behavior-driven development, and modern languages such as Rust and C++. They also touch upon the use of AI in development and deployment processes, along with debugging, observability, monitoring, and simulation tools like Memfault, Mender, and Renode. The conversation seeks to provide insights and opinions on which of these techniques and tools are worth investigating or applying to embedded projects.
00:00 Introduction to the Agile Embedded Podcast
00:06 Exploring Modern Development Buzzwords
01:26 Web Technologies in Embedded Systems
05:28 Diving into Docker for Embedded Development
07:49 Understanding Immutable Infrastructure
13:32 Continuous Integration, Delivery, and Deployment
19:53 A/B Testing in IoT Devices
23:06 API First Design in Embedded Systems
26:08 Modern Languages: The Case for Rust
27:54 Exploring Rust in Embedded Systems
28:37 Challenges with Modern C Programming
30:10 Embedded Linux and Language Flexibility
32:27 Model-Based Development with Simulink
33:53 Modern Tooling for Embedded Systems
40:25 AI in Embedded Systems
44:05 AI-Assisted Development
47:36 Conclusion and Contact InformationYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Exploring Rust for Embedded Systems with Philip Markgraf
In this episode of the Agile Embedded Podcast, hosts Jeff Gable and Luca Ingianni are joined by Philip Markgraf, an experienced software developer and technical leader, to discuss the use of Rust in embedded systems. Philip shares his background in C/C++ development, his journey with Rust, and the advantages he discovered while using it in a large development project. The conversation touches on memory safety, efficient resource management, the benefits of Rust's type system, and the supportive Rust community. They also explore the practical considerations for adopting Rust, including its tooling, ecosystem, and applicability to Agile development. The episode concludes with Philip offering resources for learning Rust and connecting with its community.
00:00 Introduction and Guest Welcome
00:26 Philip's Journey with Rust
01:01 The Evolution of Programming Languages
02:27 Evaluating Programming Languages for Embedded Systems
06:13 Adopting Rust for a Green Energy Project
08:57 Benefits of Using Rust
11:24 Rust's Memory Management and Borrow Checker
15:50 Comparing Rust and C/C++
19:32 Industry Trends and Future of Rust
22:30 Rust in Cloud Computing and Embedded Systems
23:11 Vendor-Supplied Driver Support and ARM Processors
24:09 Open Source Hardware Abstraction Libraries
25:52 Advantages of Rust's Memory Model
29:32 Test-Driven Development in Rust
30:35 Refactoring and Tooling in Rust
31:14 Simplicity and Coding Standards in Rust
32:14 Error Messages and Linting Tools
33:32 Sustainable Pace and Developer Satisfaction
36:15 Adoption and Transition to Rust
39:37 Hiring Rust Developers
42:23 Conclusion and ResourcesResources
Phil's Linkedin
The Rust Language
Rust chat rooms (at the Awesome Embedded Rust Resources List)The Ferrocene functional-safety qualified Rust compiler
You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
The Dangers of Magic in Software Abstractions
In this episode of the Agile Embedded Podcast, hosts Jeff Gable and Luca Ingianni discuss the pitfalls of relying on 'magic' in software development, particularly in tooling, build systems, and frameworks. They illuminate how seemingly helpful abstractions can become burdensome when they obscure necessary complexities or become hard to debug. Through various examples, including comparisons of Arduino and CMake, they explore what makes a good abstraction versus a bad one. The conversation also delves into the importance of composability, testability, and the real-world impact of overly simplistic or 'magical' solutions in long-term projects. The episode wraps up with practical advice for selecting and designing more effective coding abstractions to mitigate risks.
00:00 Introduction and Episode Theme
00:19 The Problem with Magic in Programming
02:54 Examples of Good and Bad Abstractions
04:45 Frameworks and Tools: Arduino vs. CMake
08:10 Vendor-Supplied Tools and Their Pitfalls
13:05 Characteristics of Good Abstractions
29:04 Testing and Abstractions
37:10 Final Thoughts and Contact InformationYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Building Trust with Git: Teaching Best Practices to Non-Software Engineers
In this episode of the Agile Embedded Podcast, hosts Jeff Gable and Luca Ingianni are joined by Bailey Steinfadt, owner of Stonepath Engineering. Bailey discusses her experiences in teaching Git and other software tools to non-software engineers, particularly in small manufacturing companies. Topics include the importance of visibility and trust in code projects, the typical profiles of her clients, and strategies for effective communication and trust-building between technical and non-technical stakeholders. The episode also touches on useful tools like GitHub, Miro, and Draw.io for managing projects and fostering collaboration.
00:00 Introduction and Guest Welcome
00:24 Bailey's Background and Stonepath Engineering
01:41 Challenges with Non-Software Engineers Using Git
05:46 Teaching Git to Non-Software Engineers
14:35 Building Trust Through Git and Communication
20:45 Tools and Techniques for Effective Communication
37:32 Final Thoughts and Contact InformationYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Applying 'Accelerate' Principles to Embedded Systems | Agile Embedded Podcast
Welcome to the latest episode of the Agile Embedded Podcast with Jeff Gable and Luca Ingianni! In this episode, we address a listener's question about the book 'Accelerate' by Nicole Forsgren, Jez Humble, and Gene Kim. Jeff and Luca delve into how the principles from this book, which focuses on Lean Software and DevOps, can be applied to embedded systems development. They discuss the nuances of embedded systems, the relevance of DORA metrics, and share insights on how capabilities and processes from the book translate to the unique challenges of embedded systems. Tune in to understand how you can adapt and implement these best practices in your projects.
00:00 Introduction to the Agile Embedded Podcast
00:06 Overview of the Book 'Accelerate'
00:50 Research Methodology and Key Findings
02:56 DORA Metrics Explained
05:30 Key Capabilities for Effective Organizations
18:41 Applying 'Accelerate' Principles to Embedded Systems
20:19 Challenges and Considerations in Embedded Systems
34:10 The Importance of Logging and Feedback Loops
37:43 Empowering Teams and Encouraging Experimentation
41:58 Final Thoughts and RecommendationsYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Navigating Firmware and Software Collaboration in Medical Devices: Insights with Weronika Michaluk
In this episode of the Agile Embedded Podcast, hosts Jeff Gable and Luca Ingianni are joined by Weronika Michaluk, Software as a Medical Device Practice Lead at HTD Health. Weronika shares her experiences and lessons learned from working with firmware teams, bridging cross-functional collaboration, and discussing the importance of version control, aligning technical aspects, and clear communication. The conversation delves into agile methodologies, customer interactions, and strategies for efficient requirement management in the medical device industry. Tune in to gain valuable insights from Weronika's extensive expertise.
00:00 Introduction and Guest Introduction
00:38 Veronica's Background and Experience
01:54 Understanding Software as a Medical Device (SAMD)
04:14 Lessons Learned in Cross-Functional Teams
05:42 Importance of Version Control
08:58 Team Collaboration and Communication
21:17 Managing Requirements in Agile Development
25:49 Effective Team Collaboration and Documentation
26:24 Tools and Processes for Project Management
26:42 Client and Team Meetings
27:13 Refinement and Feedback Loops
29:38 Change Order Process
36:11 Client Perspectives on Agile
38:09 Challenges with Agile in Medical Device Development
40:18 Differences in Client Types
45:47 Final Thoughts and ConclusionYou can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
Jeff and Luca talk about Luca's trip to Embedded World Nürnberg, and his impressions there.
Bonus content are two impromptu interviews with Luka Mustafa, CEO of IRNAS, and Francois Baldassari, CEO of Memfault
You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.
Want to join the agile Embedded Slack? Click here -
Paul's LinkedIn: https://www.linkedin.com/in/paul-gheorghe-barbu/
Paul's employer, Wenglor: https://www.wenglor.com/You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
-
You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.
Want to join the agile Embedded Slack? Click here -
Join our slack channel by clicking here
You can find Jeff at https://jeffgable.com.
You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
- Näytä enemmän