Cliff Brake

Blog

Over 20 years of articles on building connected products, platform thinking, IoT and embedded Linux.

  • 2026-08-31

    🧪 Is 13 board revisions too many?

    I was in a meeting recently with a potential customer, and they said they did not want to go through 50 prototypes to get a product out the door. 50 is a bit of an exaggeration, but I routinely see printed circuit boards (PCBs) at version 13 or so before being released to product…

  • 2026-08-28

    🏗️ Good architecture

    We may think of “good architecture” as getting it right up front. We certainly want to do as much of that as we can, but perhaps a more important part of “good architecture” is that it enables innovation loops. Good architecture makes loops cheaper, faster, safer, and more interp…

  • 2026-08-26

    🔁 The innovation loop

    Previously, we discussed that two things need to go right: architecture, and the learning loop. The learning loop is how innovation happens. Recently, I was reminded of a quote by a mechanical engineer who is regarded by some as the most brilliant engineer they have ever known: …

  • 2026-08-21

    🛤️ When building connected products, two things have to go right

    The first is architecture, decided partly up front: network topology, the protocol between processors, how function is partitioned across boards, real-time constraints, the data model, how firmware gets updated in the field, and how operations are logged and traced. These decisio…

  • 2026-08-19

    🧱 Foundations

    While we have many options in choosing technology, there are a few foundational things that are prudent to put in place early. Each costs little while the system is young and a great deal to retrofit once devices are in the field. They also speed up the prototype loop: every spin…

  • 2026-08-15

    🏷️ IDs are not about details

    With part numbers, serial numbers, and similar identifiers, the natural tendency is to over-specify. Why not encode the color, size, shape, and material in the part number? Why not encode the manufacturing date, the version, and the phase of the moon in the serial number? The inf…

  • 2026-08-10

    🧱 The hardest things

    The magic of product development appears to live in the complex things: the clever circuit design, the brilliant algorithm, the integration of many technologies. Observation suggests the opposite. Success is grounded in doing the simple things well: discipline, communication, sou…

  • 2026-08-05

    🧹 zephyr-snmp v0.1.0 - a huge cleanup!

    zephyr-snmp adds SNMP v1 and v2c support to the Zephyr RTOS. It started as a port of the lwIP SNMP code, and along the way I concluded it would be easier to maintain if it went fully Zephyr-native: Zephyr code style, Zephyr APIs, etc. What is new in v0.1.0: A complete sample to …

  • 2026-08-04

    🚣 Rowing the race you need at the end

    Daniel James Brown’s The Boys in the Boat follows the University of Washington eight-oar crew that won gold in Berlin in 1936. The part that stays with me is how they rowed the middle of a race. Washington was a come-from-behind crew. Other boats tore off the line and took an ea…

  • 2026-08-03

    🛰️ Simple IoT now processes GPS data

    Simple IoT can now read position data from a serial NMEA receiver, from gpsd, or from a simulator, and hand it to VictoriaMetrics and Grafana for storage and viewing.

  • 2026-07-30

    🧊 Why small teams have to be good at borrowing

    Large and small teams differ in many ways, but one difference stands out: how much of the system gets built versus borrowed. Compared to large teams, small teams must borrow a lot more than they build. If we use the iceberg analogy, a lot more of the project is below the surface …

  • 2026-07-29

    ⚖️ Exercise: Build vs Borrow

    In the course of product development we build and we borrow components. Some examples of each: Build: Write code (create software) Design a PCB (printed circuit board) Design a custom mechanical component Create a custom test setup Borrow: Use an OSS (open-source software) lib…

  • 2026-07-28

    📈 Do schedule estimates get more or less confident over time?

    There are two trajectories for schedule confidence. A schedule feels safest when it is nailed down up front, often built around what management wants to hear. Detailed Gantt charts add to that feeling. The modeling has value, but it rarely reflects reality in a complex system. De…

  • 2026-07-27

    🚧 Gatekeepers are ineffective

    In the context of complex systems, gatekeepers are ineffective. In product development, a gatekeeper is often a middle manager who relays information from one person to another. As an example, we have been struggling for the past year to get an installation of a monitoring system…

  • 2026-07-24

    ✉️ Drafting emails in Markdown

    As developers, we use Markdown all the time: in documentation, GitHub issues, etc. Pretty much every tool supports it now, except email. With email, we are still stuck with a 2005 MS Word experience. Why Markdown? Once you know the simple syntax, composing Markdown is super fast.…

  • 2026-07-23

    🛣️ The two ditches

    Along roads, there is often a ditch or some undesirable obstacle on either side of the road you want to avoid. The same can be said for most of life, including product development. There are two common errors: Build it all yourself: You drown in plumbing, becoming a full-time ma…

  • 2026-07-22

    🚀 Accelerating or Decelerating?

    Is your work accelerating or decelerating? This may be hard to measure, but in our gut we know. A few ideas: Where do we spend our time? Moving things forward, or just keeping things afloat? Are we releasing more or less often? How about the time from idea to deployment? Increas…

  • 2026-07-21

    🧩 From PCB change to mechanical model in one script

    KiCad and FreeCAD both expose command-line and Python interfaces, so a PCB change can flow into the mechanical assembly with a single script.

  • 2026-07-20

    📥 Email is not a workflow

    A recent meeting surfaced a problem: BOM changes in the engineering systems were not reliably reaching the production systems. “I told ’em” is how we had been doing things. We told manufacturing about the changes and handed over links to the updated release package, and items sti…

  • 2026-07-15

    🔌 GitPLM: An easy way to manage your KiCad library using CSV files in Git

    GitPLM now supports the KiCad HTTP Library API for an easy connection between your part library and KiCad.

  • 2026-07-14

    🧊 Web application architecture

    The UI is the part you see. The boring parts underneath determine whether you end up with a sustainable product.

  • 2026-07-09

    🔩 Generating Mechanical Models with Claude Code

    We recently needed a mechanical model of a USB coupler. On a whim, I suggested that the designer try using Claude Code to create it in FreeCAD from a 2D drawing - it worked! No MCP or complex setup needed. (Although there is an MCP available for FreeCAD). We’ve been doing similar…

  • 2026-04-22

    🪑 The missing leg of reliability

    After a conversation with Tim Bird about Space-Grade Linux, an idea about reliability emerged. The obvious legs of reliable systems are design and testing. What is less obvious is the third leg: active users. Use, coupled with the ability to report issues or contribute changes, d…

  • 2026-04-16

    💻 Why the terminal still matters

    Starting in the 1970s, the terminal, popularized by Unix, has been a mainstay in computing. Many developers today, and increasingly non-developers, are using the terminal. In previous years the terminal was defined by a physical monitor and keyboard displaying green text. Today, …

  • 2026-04-14

    📧 How to solve the email problem?

    How many hours go into just processing email? One reason it’s so consuming: when a message hits the inbox, it feels like it needs a response. It feels like real work. There are several ways to handle the “too much email” problem: Ignore it. Read some email, and let the rest get …

  • 2026-04-13

    📝 You can't improve an email

    I’ve been moving discussions out of email and into versioned Markdown files. Here’s what I’m noticing. Email has a structural problem: the only options are reply and quote. The original message can never be improved. When someone joins a project later, the context is buried in a …

  • 2026-04-07

    🛠️ Tools or Processes?

    What matters more – having better tools or better processes? One tends to enable, the other to restrict. Companies often split into tool-builder cultures (optimized for enabling engineers and teams) and process cultures (optimized for control, repeatability, and compliance). Both…

  • 2026-04-02

    🛩️ Why did the Wright Brothers succeed?

    While Samuel Langley had $100,000 (equivalent to $3.5 million today) in funding, a team of engineers, and Washington connections, the Wrights were bicycle mechanics from Dayton, Ohio with a fraction of those resources. Langley’s approach was to design the perfect flying machine o…

  • 2026-04-01

    🔧 What has changed around edge build systems?

    Reflecting on Embedded Linux/Edge build systems, several things have changed: ARM and RISC-V hardware is fast. Modern ARM boards and cloud instances (AWS Graviton, Hetzner CAX) build at speeds that make cross-compilation unnecessary for most workloads. For development, QEMU user…

  • 2026-03-30

    🔧 Why Go Works Well for Building CLIs

    The last post discussed the importance of command line interfaces (CLIs) in the AI agent stack. The next question is — what language works best for building CLIs? Consider the requirements: Often a CLI needs to interact with APIs. Easy to build and distribute to all platforms. A…

  • 2026-03-26

    🔌 API + CLI + Skills = the Future of AI Agents

    DHH’s recent post offers a glimpse into the future: “So while we keep cooking on actually-useful native AI features in Basecamp, we’re launching a fully agent-accessible version today. We’ve revamped our API, created a brand-new CLI, and wrapped it all in a skill to teach agents…

  • 2026-03-25

    ❓ Better questions get better answers

    A common challenge in communication is getting people to open up and share what they really think. One way to improve this is to avoid leading questions, which steer a person toward a particular answer instead of letting them respond freely. Some examples: Leading questionOpen-en…

  • 2026-03-24

    🏞️ Communicating Status Without Demanding Attention

    One precept of “managing up” is that over-communicating tends to work better than under-communicating. This is where releasing “often” comes in. Releases offer a natural way to communicate status because they don’t feel like something requiring a response, the way a direct email …

  • 2026-03-20

    🤝 How to manage up

    The concept of “managing up” can be a valuable practice for developers and middle managers. It seems counter-intuitive that we need to manage the people over us. But, simply put, managing up is intentionally improving the relationship with your boss to make their job easier, alig…

  • 2026-03-19

    👥 The release is a language everyone understands

    A release is a good way for developers to communicate with everyone else: What got done What changed How to use or build the latest version Where to get support or provide feedback A regular cadence for communication A standard format everyone can follow Releases can save a lot…

  • 2026-03-18

    📦 What is a release used for?

    A release needs to happen before a product is shipped to customers for sale. Across the spectrum of the product development lifecycle, releases are used for: Generate feedback (so we know where we stand) Provide something others can build on (this is how we scale) Deliver value …

  • 2026-03-17

    ⚡ The essence of shipping faster

    In recent conversations about why development schedules slip and what to do about it, several themes continue to come up: Openness - This is key to surfacing issues early. Safety - People must feel safe being transparent and speaking up. Collaboration - People must be willing to…

  • 2026-03-13

    🔀 What is the difference between MVP and Release First?

    MVP (Minimum Viable Product) is a concept from Eric Ries’ Lean Startup methodology. The idea is to build the smallest possible version of a product that lets you test a hypothesis with real users. Instead of spending months building a full-featured product, you strip it down to t…

  • 2026-03-12

    ✅ Each release is 100% done

    One common problem in product development is developers not finishing a feature or task. They get it to 70% done and rush off to the next thing. Bugs linger, edge cases go unhandled, testing falls short, and the release process remains incomplete. “100% done” does not mean the pr…

  • 2026-03-11

    💡 A Simple Example

    The Release First mindset starts with how you handle reasonably complex information (a procedure, technical details, etc). There are two approaches: Email or message the information. Put it in Git and send a link or PR. The first is transient, inaccessible, and difficult to bui…

  • 2026-03-10

    🏷️ The simple approach to versioning

    The biggest barrier to starting something is an unwillingness to start simple. Let’s use versioning as an example. The natural tendency is to think that all software components need their own version, which can be a daunting task to implement, track, and manage. However, until a …

  • 2026-03-09

    📦 The bare minimum to call something a release

    What is the bare minimum to call something a release? Consider the following: A version that increments with every release. A changelog that describes what has changed for every version and why it matters. A clear identification of any assets (IPNs). Unique IDs for anything buil…

  • 2026-03-06

    ❓ Release Questions

    Some questions to consider about a release: When is it created? Where is it stored? What does it contain? How is it created? Who uses it? Why is it used? The “Wh- questions” are a powerful technique for analyzing anything we do.

  • 2026-03-05

    🤔 Two types of unknowns

    There are two types of unknowns: Things we don’t know. Things we think are true, but are not. 1 Both can inflict havoc on our plans, but the second is the most damaging. Why? The first is more associated with doing nothing. Bugs not known to be there, etc. But the second prompt…

  • 2026-03-04

    🧊 The hardest thing to manage

    The things we know and understand are easy to manage. We can hire managers who are good at this. Tools can effectively track this. Life is good. The difficulty arises in the unknown. The iceberg analogy illustrates this well. The things we see, understand, and touch are above wat…

  • 2026-03-03

    🎉 The BIG 1.0 Release

    BIG releases are appealing — the magical moment when everything comes together. The months or years of hard work that finally come to fruition. The excitement and fanfare of the BIG announcement. The accolades and admiration of customers and the press. … except, it rarely works t…

  • 2026-03-02

    ❓ What is the difference between "releasing" and "shipping"?

    Someone asked: “What is the difference between releasing and shipping?” Are they the same thing? In one sense they are. However, drawing a distinction here—though somewhat arbitrary—is helpful in this context. Release: Make something available. Ship: Deliver to the customer for s…

  • 2026-02-27

    🚨 Problems with not Releasing First

    What is the downside of not Releasing First? Integration problems Manufacturing issues Last minute bugs appearing Lack of product fit (does not solve customer’s problem) The common theme is unforeseen problems that typically surface late in the development cycle. The point of R…

  • 2026-02-25

    🌅 Why optimizing the user release experience early is so important

    With Release First, the goal is to optimize the Big Blue Button (make it easy for users to use a release) early. Why is this important? There are many reasons, but the most important is so that users actually use the release and provide needed feedback early. Without optimizing t…

  • 2026-02-24

    🔵 The Big Blue Button

    In the past days, we’ve been focusing on the Big Green Button, but there is another side of this - what happens after the release? Does the release get used? If not, why not? If a release does not get used, there is little point in releasing. There are several aspects to consider…

  • 2026-02-23

    🧠 The Human Factors

    Gerald M. Weinberg once said: No matter what the problem is, it’s always a people problem. — Gerald M. Weinberg At its heart, release-first addresses the human element: Our propensity to procrastinate in getting releases out. Our fear that something might be broken in the rele…

  • 2026-02-20

    ☝️ What do we mean by "First"?

    What do we mean by Release “First”? Several things: First in the timeline of development. First thing we focus on during implementation. First priority. Simply put, implement the Big Green Button before implementing the actual deliverable. This might include: Tests CI/CD Build…

  • 2026-02-18

    🟢 What is in the Big Green Button?

    As previously stated, the Big Green Button enables teams to quickly and confidently release. But what is the Big Green Button? Several things come to mind: Automation that translates code/design/docs/models into assets others can use. Automated testing that builds confidence in …

  • 2026-02-17

    🟢 The Big Green Button

    The word “release” can be a noun (what gets released) or a verb (the process of producing a release). “What” and “How”. Many teams produce complete high-quality releases that allow them to produce or deploy something at some point in time. However, each new release requires signi…

  • 2026-02-16

    🔄 The release circle

    As previously discussed, a release is useful and quality. What counts as a release? One way to think about this is to view the release as a circle with two attributes: What (it contains) Who (it’s for) Initially, there is not much in the circle (perhaps only a specification), a…

  • 2026-02-11

    🧩 Why things fall apart at the end

    As discussed in the previous two posts, things often go haywire near the end of a project cycle, right before the BIG Release. Why is this? Things seem to go so well at the beginning of the project. While it is impossible to detail every reason this happens, a few are listed belo…

  • 2026-02-10

    🪞 The illusion of project meta-data

    Many tools exist for managing and tracking projects: Jira, Trello, GitHub projects/issues, Notion, Airtable, Asana, MS Project, etc. These all can be very useful. Why then does effective project tracking remain so elusive? As mentioned in the previous post, in a typical scenario,…

  • 2026-02-09

    🚢 What is the #1 problem in product development?

    I’ll go first … a very common challenge is shipping on time and the resulting uncertainty to the business. We often add a 2-3x factor on any estimates, but sometimes even that is not enough. Shipping (delivering value) is the bottom line — it generates revenue and sustains the bu…

  • 2026-02-04

    📦 More definitions of a release

    A release must be: reliable, useful, repeatable, and predictable. This delivers outcomes of: quality, value, timeliness, and consistency. The second group is the outcome we want, the first group is what we focus on to get there.

  • 2026-02-03

    🛠️ Do things that don't scale

    From Paul Graham’s popular essay Do Things That Don’t Scale: Over-engaging with early users is not just a permissible technique for getting growth rolling. For most successful startups it’s a necessary part of the feedback loop that makes the product good. Making a better mouset…

  • 2026-02-02

    🔮 Can we predict product development schedules?

    Estimating or predicting product development is difficult. Teams often end up adding a 2-3x padding to any estimate, because bitter experience has taught them not to depend on their own estimates. There will always be a high degree of variability in product development, especiall…

  • 2026-01-29

    🚀 How to make releases painless

    In the olden days, releases were a lot of work. The process involved manually building/testing, uploading to a distribution location, sending out notifications to interested parties, etc. Supporting multiple platforms meant even more work. Today, there are better ways. With moder…

  • 2026-01-27

    📖 When should you write the user manual?

    Most of the time, teams write the user manual at the end of a product development cycle right before the Big 1.0 Release. It is one of those things that is not much fun, and teams subconsciously put it off while fighting bigger fires. But what would happen if we write the user ma…

  • 2026-01-26

    🎬 Is a Demo the same as a Release?

    Some development teams have a weekly demo where they might show what they are working on to others in the company or the customer, which is a great idea as it encourages hitting milestones and early feedback. However, is the “demo” just another name for an “internal release?” The…

  • 2026-01-23

    ⏱️ How do you find time for higher value tasks?

    Do you (and by extension your organization) find yourself mired in minutia and struggling to find time for higher value tasks? What is the solution? You can hire more people to do the lower-value stuff (a perfectly valid approach). You can also own YOUR Platform. One of the goals…

  • 2026-01-22

    ⚖️ Reliability tradeoffs

    Recently, one of our servers running Arch Linux refused to boot after updates. The fix was to comment out a line in the /etc/default/grub file. It took about 15 minutes to find and everything was done in a rescue terminal — no need to boot from a rescue image. This server has bee…

  • 2026-01-19

    ⚖️ Reliability, Cost, and Value

    Everything has a cost and value to the customer. How much value does the customer put on 99.999% reliability vs the value of other features they need? If one system out of a thousand fails every 3 years (0.033% failure rate per year), what does that cost compared to a set of feat…

  • 2026-01-16

    🔗 What defines reliability?

    Reliability is a common concern - this thing is critical - it needs to work! Many things affect the reliability of a system: Bugs in software we write Bugs in 3rd party components (OSS, etc.) Hardware failures Edge condition failures (things we have not tested) Tolerance stack-u…

  • 2026-01-14

    🚀 Shipping faster - what are the stakes?

    What do project delays cost? The obvious thing is the loss of revenue. Time is money. However, there are other less tangible consequences: Customers lose interest. Team loses motivation. Supporting organizations (vendors/communities) may not take the team as seriously. Automatin…

  • 2026-01-13

    🔍 It is often more work to review something than to do it

    As an experienced person, I am sometimes called on to review something. This can be a frustrating, seemingly hopeless task. With one developer, I commented that he could write code faster than I could review it. While there are some issues you can spot from a cursory look, most i…

  • 2026-01-12

    🚀 How far do you take releases?

    Thus far, we have defined a release as something that is useful and high-quality. Typically, we think of a release as something formal - v1.3.8 that is packaged, built, and announced. But we can push this further. What about pull requests? Is every pull request that is merged at …

  • 2026-01-09

    🎯 Standards for internal vs external releases

    It is natural to think of internal releases as “low stakes” - if it crashes and burns, no big deal. It’s just an experiment, right? Near production release, we’ll toss it over the wall to QA/Manufacturing and find all the issues. This is partly true, and partly false. While it is…

  • 2026-01-08

    📦 What do we release?

    Everything! Documentation Hardware Software Prototypes Products Lunch Engineering is fundamentally the act of creating something new. And that something new needs to be useful to someone or something. And the way we deliver “useful” is the release. If we’re not releasing, we’re…

  • 2026-01-07

    🤝 A release is what unifies Engineering and Business

    Some feedback on yesterday’s post (What is a release): What specifically flows into the two points? Value? Effort? Perhaps a better way to phrase this is these are the two points of focus that unify the development team with the rest of the business organization. And the releas…

  • 2026-01-06

    📦 What is a release?

    There are two aspects of a product release: Something useful that others can experience. Produced with a high level of confidence. Everything flows into these two points.

  • 2026-01-05

    🚀 Shipping faster leads to predictability

    Shipping faster does not only mean getting to v1.0 faster (or even on time), but also many internal releases at a good rate. This is the only way to bring predictability into the development process.

  • 2026-01-02

    🔗 Platform thinking does not mean we don't use other platforms

    On the contrary, platform thinking readily embraces other tools and platforms. The difference is: We add our own tooling, integration, and workflows into the mix. We own the integration points so we can readily swap out/in 3rd party components as needed. We are not overly depend…

  • 2025-12-31

    🔍 AI coding requires better inputs and robust verification

    Some great feedback on the previous post (Impressive is not always effective): “I agree. It would be interesting, however, to compare the progression of AI code generation with that of compilers - were there star assembly-code engineers saying that compilers were just a way to b…

  • 2025-12-30

    ✨ Impressive is not always effective

    When AI generates something, the result is often “impressive.” We might marvel at how quickly lots of code is generated that mostly works. Generated documentation is extremely detailed and well formatted. AI-created diagrams are colorful, use emojis effectively and every last det…

  • 2025-12-29

    🥄 The beauty of human creativity

    In this age of machine-generated perfection, something is still deeply rewarding about grabbing a stick of wood and making something by hand. This past Christmas, with the help of kids and grandkids, we made a few mixing spoons for gifts. Starting from the same pattern but with v…

  • 2025-12-24

    📖 The definition of the word 'Platform'

    The definition of the word “platform” includes things like the following: Acts as foundational for other products or services, not the final end product itself. Provides a stable base. Typically supports multiple, distinct applications or use cases. A formal declaration of the p…

  • 2025-12-23

    🔄 Platform Thinking is a habit

    Platform Thinking in the context of product development has many parallels to effective habits in personal life. With personal exercise, healthy eating, getting enough sleep, and reading good books - these are difficult to start, but easy once started, and rewarding once finished…

  • 2025-12-22

    🎯 Who is Platform Thinking for?

    Platform Thinking is for anyone who wants to take the friction out of creating, publishing, testing, integrating, and deploying products. The result? Value. Quality. Timeliness.

  • 2025-12-18

    ⏳ The long-term compression timeline

    Below are several timelines illustrating long-term compression comparing a product development timeline: 20 years ago Today Today with Platform Thinking The big effect of long-term compression is that negative consequences can hit much earlier, delaying initial shipment (the mi…

  • 2025-12-17

    🗜️ Long-term compression

    One reality of developing products with modern technology is the compression of the short and long-term. Today, the consequences of actions come back on the timeframe of months instead of years, as it might have been ten or twenty years ago. No longer does it work to take shortcu…

  • 2025-12-16

    🚀 Platforms are not just for developers

    This is an interesting post from a Marketing person creating website pages: I built 19 website pages in a single day while my team was out for US thanksgiving. Not mockups. Not placeholders. Actual, shippable pages: a full partner ecosystem landing page plus individual pages for…

  • 2025-12-15

    🔄 Breaking the AI slop cycle

    “AI Slop” is a common expression describing a familiar phenomenon. It refers to sloppy code (or other assets) generated by AI that mostly works, lacks proper review, and may be poorly architected or implemented. The primary characteristic of AI Slop is that it is hard to read, un…

  • 2025-12-12

    🤔 Isn't this just agile?

    A reader responded to the last post with a comment: Isn’t “agile” a part of product thinking too? That doesn’t seem linear? This is a good question. Agile covers a lot of ground. The Agile Manifesto states: We are uncovering better ways of developing software by doing it and h…

  • 2025-12-10

    🏗️ Platform thinking vs 📦 Product thinking

    Platform vs. product thinking is a difference in perspective. Platform thinking does not ignore the product, but rather approaches it from a slightly different angle.

  • 2025-12-09

    🏆 What is the ultimate platform success?

    The ultimate platform success is when an internal platform turns into a sellable product/service, or an open source project. Perhaps some companies succeed by starting out building a platform as a product, but the greatest platform successes started as internal platforms: AWS Ka…

  • 2025-12-05

    🔀 The division between group and personal workflow

    When thinking about developer workflows, tools, and resources, dividing them into two categories proves useful: personal and group. A group resource is something that multiple people use (or should use): SDKs, libraries, linters, formatters, AI commands/context, etc. Personal too…

  • 2025-12-04

    📦 CDPD - Container Driven Product Development

    When updating the Simple IoT documentation, the question arose - how to install mdbook and a few plugins? Of course pacman has part of what is needed. In the past cargo has been used, but that is slow and not a good fit for shared tools. Then it became clear: Any shared tools use…

  • 2025-11-26

    📝 Tips for working with Markdown

    Markdown is now a nearly universal format for documentation in many workflows. A few tips for being effective with Markdown: Use a standard editor most of the time (VS Code, Vim, Helix, etc.). This is faster than graphical “Markdown” editors for most things. Additionally, this bu…

  • 2025-11-25

    🤔 Why > How > What

    Why? Is this the right thing to build? How? Can it be done efficiently, repeatedly? What? The deliverable. These are listed in order of importance, which also corresponds to the level of difficulty. The trouble with “How” and “Why” is these are less visible, which contributes to…

  • 2025-11-24

    🥉 Good, fast, cheap - choose three

    A familiar phrase states: “Good, fast, cheap. Choose two.” This is similar to the development triangle. Which states that everything is a tradeoff. However, improving all three becomes possible when doing things differently. That is the fundamental purpose of YOUR platform - t…

  • 2025-11-21

    ⏳ The "long-term" may be closer than you think...

    A common objection to “Platform Thinking” (proactively build your platform from the start) is: there isn’t time right now; this can be done after the 1.0 release when there is ample time and resources. The “long-term” can be defined as when the consequences of actions come back -…

  • 2025-11-20

    📝 DDPD - 🧪 TDPD - 🚀 RDPD

    We have been discussing document, test, and release-driven development (doing these things first before implementing features). This ensures the product: Meets the customer’s needs (DDPD). Is quality (TDPD). Can be modified any time and released quickly (RDPD). Without these, t…

  • 2025-11-17

    📝 DDPD - Document Driven Product Development

    Building on TDPD and RDPD, Document-driven product development (DDPD) offers another perspective. Ideas: Document the feature from the user’s perspective before implementing anything. Keep the documentation close to the code (same repo, etc.). Use a doc-driven AI plugin when app…

  • 2025-11-13

    🚀 RDPD - Release Driven Product Development

    Yesterday we talked about Test-Driven Product Development. Release-driven product development is another perspective. Build the release/deployment mechanism before implementing the design. Automate as much of the release as possible. This includes all assets needed to build/depl…

  • 2025-11-12

    🧪 TDPD - Test Driven Product Development

    We’re familiar with TDD (test-driven development) in the software world. Basically the idea is to create unit tests before implementing a feature. What if we extend this to systems, hardware, and even mechanical? Write end-to-end system tests before developing a feature. Design/…

  • 2025-11-07

    🍄 Mushroom Management

    I recall a quote from the book The Soul of a New Machine that describes “Mushroom Management” and goes something like this: “Keep them in the dark, feed them sh**, and watch them grow.” (This book chronicles the experiences of a computer engineering team racing to build the nex…

  • 2025-11-05

    🚀 The BIG Release vs. 🌊 a Continuous flow of Value

    How do we look at a product release? As a big one-time event, where we spend heroic efforts to pull it over the finish line? Or as a continuous flow of high-quality value into the product (even before the customer ever sees it) that is maintained with every change? This is a mind…

  • 2025-11-04

    🔀 The Power of Git* workflows

    Git + Git hosting platforms enable both local and cloud-based workflows. Local: Lightning fast access to files - leverage the power of your local computer Use powerful native tools (editor, e-cad, m-cad, AI agents, command-line tools, scripts, etc.) Test on local hardware Work o…

  • 2025-11-03

    ✍️ Why writing is important

    Some people are wildly successful without writing. So, if the goal is only to make a lot of money or have a lot of power, this advice may not apply. However, for those who want to: Think better Scale ideas beyond direct personal contact Capture and preserve ideas Grow by buildin…

  • 2025-10-31

    🔄 Three levels of workflow

    There are three levels of workflow: Personal (what you do to get things done) Department/Discipline (How multiple people who do the same thing get things done – Example: PCB design) Cross-functional (How people who do different jobs interact - Example: Engineering, Support, Manu…

  • 2025-10-30

    🤝 The benefits of sharing

    I wrote my first Claude plugin that packages up some commands that I use in about every project I work on. This plugin allows me to have these commands globally so I don’t have to keep copying them from project to project. Although the commands originally worked pretty well, the …

  • 2025-10-29

    🛠️ The new Artisan Age

    We live in a world of powerful tools. Milwaukee battery-powered hand tools, high-end PCB design suites, cloud platforms, open-source tools, etc. And while these tools get us a good way toward the goal, they do not do everything. Additionally, if all you ever use is the mainstream…

  • 2025-10-28

    Human Friendly Industrial Device IDs

    Do you deploy 10’s to 1000’s of devices and need to quickly identify them in the field for configuration, maintenance, or troubleshooting? This article explores how this can be made much easier by using device IDs that are easy for humans to process. In a previous article (A Sur…

  • 2025-10-27

    🏗️ The difference between Product and Platform

    Product is what you build. Platform is how you build. Most people build the first and outsource the second. After all, the product has the IP—the secret sauce—the valuable part. However, we observe in successful companies a focus on their internal platform. They build their own t…

  • 2025-10-23

    🎯 A single source of truth

    An intense discussion about part/version numbers driving application logic surfaced an idea to create a simplified version of the product metadata that simplified the programming logic. However, this rarely works out long-term, because several things happen: The two sets of data…

  • 2025-10-17

    📈 Scale vs. Value

    As scale increases (# of people, # of technologies, # of products, # of teams, life cycle of product, experience, amount of knowledge, etc.), what does the value produced look like? Metcalfe’s law states that the financial value or influence of a telecommunications network is pr…

  • 2025-10-14

    💻 Local First Dev

    In the last couple decades, we’ve observed the success of SaaS web applications (Google Docs, Salesforce, Basecamp, Trello, etc.). These applications have unleashed collaboration using the web platform. Before this, users might have emailed documents around (many still do this) o…

  • 2025-10-13

    💬 The importance of effective communication

    Recently, effective communication has been discussed. But let’s step back – why is communication so important? As developers, isn’t coding what we do? Think for a minute – how much time gets spent coding/designing vs. everything else? For most, it is probably too little time on p…

  • 2025-10-10

    🧠 Context is everything

    In conversation, I find myself saying: “what is the context of your comment?” At times we find ourselves responding before we really understand something. AI does the same thing – it just spouts off, even if it does not understand your context. This is one reason local agents lik…

  • 2025-10-08

    💡 Reflections from AI-coding a 10,000 line app

    Lessons from AI-coding a 10,000 line app BRun is getting usable. Claude Code wrote almost all of it using Doc-driven development (manually write/update the docs, and have Claude write the code). Some thoughts: Claude is fast – there is no way I could have written this app manual…

  • 2025-10-03

    📏 Less code is not the ultimate goal

    Less code is not the ultimate goal Consider the following byte to binary C program: int main(int b,char**i){long long n=B,a=I^n,r=(a/b&a)>>4,y=atoi(*++i),_=(((a^n/b)*(y>>T)| y>>S)&r)|(a^r);printf("%.8s\n",(char*)&_);} Unless you are trying…

  • 2025-10-01

    😊 Other ways to align the happy path

    Yesterday, we discussed aligning the happy path in code. Are there other ways to align the “happy path”? (The happy path is the desired path where things are functioning as expected.) Some thoughts: Focus on your productive people - as a manager focus your efforts on making life …

  • 2025-09-30

    😊 Align the "happy path" in your code

    An idiom that I learned in the Go community is to align the happy path. An example in C below: happy path not aligned int process_file(const char* filename) {     FILE* f = fopen(filename, "r");     if (f != NULL) {         char buffer[100];         if (fgets(buffer, si…

  • 2025-09-29

    🔓 You should not be needed

    An effective process, team, or organization should be able to continue on if any individual steps away for a bit, or forever. But, most people are insecure and like to be needed, so subconsciously structure things to require them to be present for things to proceed – the gatekeep…

  • 2025-09-24

    🚧 Three things that hinder product development

    Not using new tech when applicable. Doing the same work over and over again instead of automating. Lack of collaboration.

  • 2025-09-23

    ⚙️ Three aspects of product development

    Finding and leveraging existing technology. Developing some of your own technology. Mixing it together. All three are necessary.

  • 2025-09-22

    ⚖️ Technical debt compounds with you doing nothing

    Technical debt is like any other kind of debt – it accrues when nothing is done. This is perhaps the most insidious aspect of debt. How does technical debt work? Mainly that software (and technology in general) moves on (especially OSS), and we do not keep up. “It works, why do …

  • 2025-09-12

    📚 Without docs

    Design files (mechanical, electrical, or software) contain the technical details that allow us to manufacture something in the moment, but they often don’t contain the “why”. Why is this mechanical feature present? Why is this circuit necessary? Why is the code structured this w…

  • 2025-09-11

    ⚖️ Code is a liability, not an asset

    A wise developer once said: Code is a liability, not an asset. Aim to have as little of it as possible. This is perhaps the #1 rule for clean code. Some examples: Don’t implement “just in case” features. Remember YAGNI. Premature abstractions often do more harm than good. Prem…

  • 2025-09-10

    ✂️ YAGNI

    YAGNI - “You ain’t gonna need it!” If you don’t need it now, the chances you’ll need it in the future are small, or at least not the current implementation. Do the simplest thing that works now. Get feedback. Repeat. Iterations are the key – get better at doing iterations faster …

  • 2025-09-09

    🐛Kernighan's Law

    Kernighan’s Law: Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. Cliff’s Law: In three months, it will be three times harder to read the code you jus…

  • 2025-09-08

    🌀 Complex systems are hard to predict

    My wife makes sourdough, which is a multi-day process and at times unpredictable. Recently, the current batch was a little sluggish and not expanding like it should, so she “fed” it and left it on the counter. It took off during the night and was all over the counter in the morni…

  • 2025-09-04

    📊 Simple data formats + powerful tools scale

    There is an ongoing shift in data analysis tools. Another example is datavzrd. datavzrd is a zero/low-code, interactive, visual, server-free, browser-based reporting tool for tabular datasets. The paper makes an interesting statement: Most spreadsheet applications, including Exc…

  • 2025-09-03

    📚 Documentation never has to go out of date again

    AI is really good at updating documentation after implementation. While I strongly advocate writing the documentation to drive AI, inevitably, the implementation takes some unanticipated turns, so making sure everything is in sync after implementation is a good task for AI. Are t…

  • 2025-09-02

    📚 Keep documentation close to the design/code

    I find it works best to keep documentation as close to the code or design files as possible. There are several benefits: You can update, commit, and review documentation as part of the standard working process (pull requests, CI, etc.) You can use tools you are already using (li…

  • 2025-08-29

    📝 Document "why" not "how"

    Be kind to others (and your future self) and document why you did something. AI is pretty good at generating the “how” any time you need it, but only you know the “why” because you have that context.

  • 2025-08-28

    🔄 Closed-loop engineering

    What are some ways we can close the loop in engineering efforts? Systematic testing User feedback These ensure whatever we build works and is useful.

  • 2025-08-27

    🚴 The power of movement

    Rod’s thoughts on Riding a Bike are thought provoking. … A decision that might be bad. Yet, with it, you can steer. Just like riding a bike. If it’s standing with no movement, you can direct the handle and still be where you are. It’s when you’re moving on the bike that you give…

  • 2025-08-26

    🔄 Closed-loop humans

    What are some ways we as humans can close the loop? Listen Reflect Write Without these, we operate in a largely open-loop mode without the feedback we need to improve or correct our course. Action bias is good, but it helps to know we are doing the right things and going in the…

  • 2025-08-25

    🔄 Look for closed loops

    Closed loop systems are stable. Why? Because they learn and self-correct. In any system, process, person, or organization, look for closed loops. If something is not working, chances are there is an open loop.

  • 2025-08-22

    🔄 Close the loop with AI

    There is a fascinating statement in a recent MIT study that claims 95% of organizations are getting zero return from GenAI investments. The core barrier to scaling is not infrastructure, regulation, or talent. It is learning. Most GenAI systems do not retain feedback, adapt to c…

  • 2025-08-21

    💰 Ways to reduce your AI costs

    AI is not free, as there are significant costs associated with training and hosting modern AI models. Some ideas on how to reduce costs with tools like Claude Code: If you do something that is somewhat repetitive, have AI generate scripts or programs that do the work instead of …

  • 2025-08-19

    💰 What is the cheapest PDM tool out there?

    Product Data Management (PDM) is how you manage and publish your product data. The goal is to ensure all the stakeholders share a common understanding, confusion is minimized, and quality is maintained. The simplest PDM system is to put a bunch of files on a fileserver and talk a…

  • 2025-08-18

    🗂️ Git has an unfortunate name

    Git, which was created 20 years, and various hosting platforms, has revolutionized software development workflow and collaboration. The name Git was chosen by its creator, Linus Torvalds, and has a humorous backstory rooted in both practicality and world-class trolling. In Britis…

  • 2025-08-15

    📁 Git* solves the problem of managing files

    The thing you get with Git* is a sane way to manage files: organization (team/repo/directories) documentation (excellent support for Markdown) efficient navigation (links in READMEs and other markdown files) history (who changed what when) collaboration (issues, pull requests) d…

  • 2025-08-14

    📁 The file dilemma

    There is this movement against files in most disciplines. Files are hard to manage, track, version, and secure (unless you use Git). Thus, a lot of tools have moved to SaaS (software-as-a-service) applications in the cloud. Jon Hirschtick articulates this point of view very well.…

  • 2025-08-13

    🔄 AI and documentation - close the loop

    Starting with good documentation is often a better way to use AI. However, you can also close the loop and have AI update the documentation when it is finished. It can fill in details, clean things up, etc. This closes the loop. Then repeat.

  • 2025-08-12

    🤖 AI is the new compiler

    There are two ways to use AI: Start with a vague prompt and keep prompting until we get the result we want. Point the AI at documentation, and keep updating the documentation until it is clear enough that AI can do the right thing. Even though it takes more time up front, in th…

  • 2025-08-11

    ✨ Anyone can write scripts now

    With Claude Code (and likely many other AI technologies), anyone can write scripts now. Instead of writing in a technical language like Python or Bash, you can now write a sequence of commands with some rules in plain English, and Claude transforms these into the technical bits t…

  • 2025-08-08

    ✏️ Effective Communication (Sketching)

    Sketching is kind of like writing cursive—it engages a dynamic in our brains that inspires creativity. As we mostly use computers, it takes extra effort to pick up pen or pencil, but surprising things happen when we do. It engages broader areas of our brain, and there is a flow t…

  • 2025-08-07

    🎨 Effective Communication (Drawing)

    We’ve already explored 4 modes of communication (audio, written, images, video). Drawings are another, and today it is even easier to do with tools like Excalidraw and Draw.io. It is easy to copy drawings from both into other applications. A clean drawing/diagram brings another l…

  • 2025-08-06

    📹 Effective Communication (Video)

    Video is now an important way to communicate. The most obvious type is Zoom calls. But there are other ways we can use video such as screencasting, recording demos, etc. Position a decent camera at a good angle. Shooting up your nose probably isn’t a good camera position. Screenc…

  • 2025-08-05

    📸 Effective Communication (Images)

    “A picture is worth a thousand words.” There are many times when a screenshot or a photograph can drastically improve the rate of communication. Therefore, figure out ways to do this efficiently. Make sure your computer system has an efficient way to capture and mark up screensh…

  • 2025-08-04

    ✍️ Effective communication (Written)

    For starters, consider Michael Lynch’s “Underused Techniques for Effective Emails”. A few points in summary: Put the most important information first. Use headings, code blocks, and other formatting. Be succinct. Provide context by quoting and replying (bottom posting in emails …

  • 2025-08-01

    🤖 How I use Claude Code to help publish this blog

    I have been using Claude Code to help with the following tasks on this blog: proofread (including detecting passive voice) add tags add an emoji to the title These are not rocket science, but they also take time and are something AI does pretty well. This video shows how the pr…

  • 2025-07-31

    🎧 Effective communication (Audio)

    Effective communication requires that those receiving information from us can easily process it. I’ve been on way too many calls where you can barely hear the speaker due to echo, background noise, or other audio problems. Some things I’ve found helpful: Use a headset. This elim…

  • 2025-07-29

    📧 Top vs bottom posting in email

    I was thinking about computing history this morning, and I wonder how many young people even know that bottom posting in email is even a thing? Some of the older OSS projects still have this culture, but I suspect that most emails sent today use top posting. I find myself getting…

  • 2025-07-28

    🎉 200 posts

    This marks the 201st post I’ve sent – 2/3’s of the way through the 300 bad posts. How is it going? I still enjoy the process and the thinking it brings. However, it is getting a little bit more difficult recently to keep the discipline, especially with busy project and summer sch…

  • 2025-07-24

    🔗 Integration, not isolation (part 2)

    We recently discussed integration, not isolation from a technical perspective. In an organizational context, we can have integrated cross-functional teams, or isolated silos. And the easiest way to avoid silos is transparency and common systems. These things are hard – they don’t…

  • 2025-07-23

    🔗 Integration, not isolation

    In a recent discussion, the comment was made that containers are not always a good fit for edge/embedded devices, as they are designed for isolation (which is useful at times for cloud workloads), but with embedded, we want tight integration. Justin Schneck advocates file-system …

  • 2025-07-22

    📈 What do we mean by scaling?

    This can mean many things: More units sold More customers served More people doing the work More features More innovation More models produced More model options More quality We could go on, but basically we mean more of something over time. And the “over time” part means we ne…

  • 2025-07-21

    🔄 Open loops -> technical debt

    If something is corrected, it needs to be fed back and incorporated, so you don’t keep redoing the same stuff over and over and eventually bury yourself in technical debt. Effective organizations close the loop.

  • 2025-07-18

    🧩 Composing is hard, complexity is easy

    We’ve recently explored the idea that composing simple things is the way to scale. But this is harder than just cranking something out. Some examples: It is much easier to create an Excel spreadsheet than write a Python script to process a CSV file and create a chart which can b…

  • 2025-07-17

    🎼 Compose software like music

    Music is an interesting thing – a beautiful arrangement is composed of very simple constructs – a handful of simple notes on a relatively simple scale. The brilliance is in how these simple constructs are arranged. Likewise, brilliant software is composed of simple data structure…

  • 2025-07-16

    🌱📈 Simplicity scales

    When programming, we learn that simple interfaces and simple data structures are good, because they are flexible. Simple file formats are the same. We can do way more with a CSV or Markdown file in terms of presentation and automation than we can with Excel or Word documents. Thi…

  • 2025-07-15

    📏 Goodhart's law

    Goodhart’s law states: “When a measure becomes a target, it ceases to be a good measure”. Metrics are useful, but they are just a tool, not the goal. If Metrics become the goal, then they undermine collaboration, trust, and transparency.

  • 2025-07-10

    📈 Why GUI development tools don't scale

    This is an interesting read: GUIs are Antisocial This hits on an important point… GUI tools don’t scale, because they are not social. Two of the most complex efforts humans have accomplished are chip design and software development – both are firmly entrenched in text based forma…

  • 2025-07-08

    🔭 Text based formats and command-line tools are the future

    For the past three decades, we have been told that graphical user interfaces (GUIs) will revolutionize computer use and even programming. In many ways, they have made computers very accessible for the average person – especially phone UIs. However, the command-line tools and text…

  • 2025-07-02

    🔄 Flipping the playbook for AI coding

    A lot of focus these days is on “good AI prompts.” Some of the best prompts may be documentation and tests. Write your CHANGELOG.md entries first, then update the documentation, then write the tests, then tell the AI to update the code to match. We tend to get it backwards—asking…

  • 2025-07-01

    🧑‍💻 The first step in AI coding

    ✔️ Should be “How does this work?” ❌ NOT “Implement this feature.” Understanding should precede any work, especially in complex systems.

  • 2025-06-26

    👥 Alternatives to meetings

    ✔️ Instead of presenting in a meeting, record a screencast and share it. ✔️ Publish your work often. ✔️ Utilize notifications in workflow tools. ✔️ Utilize a team chat tool such as Signal, Slack, Discourse chat, Discord, etc.. This does wonders for bonding teams (especially distr…

  • 2025-06-24

    🥣 The two ingredients for agility

    ✔️ Low friction: tooling and workflows that allow anyone to make changes easily. (good build systems, clean libraries, release automation, etc.) ✔️ Confidence: what we are doing is not going to break things. (CI, end-to-end testing, review, etc.) #1 is obvious. #2 is subtle – if …

  • 2025-06-23

    ♻️ How to iterate quickly on hardware

    Today, we mostly think of iterating quickly on software, but it is becoming increasingly possible to also do this with hardware. A few ideas: Printed circuit boards (PCBs) are now relatively cheap and quick to manufacture in low quantities from companies like JLCPCB (you can hav…

  • 2025-06-20

    🤝 Modern product development is a collaborative endeavor

    There is no way around this – even if you are a Company of One. You must collaborate with: ▶ OSS communities who provide the tools and software you use, ▶ Your customers – if you are not learning from them, you probably won’t understand and fulfill their needs, ▶ and Your team. W…

  • 2025-06-19

    ✨ Use the most advanced technology that is comfortable in your product design

    Some examples: ▶ When designing a PCB, put down the smallest packages you are comfortable working with. Example: put down 0603’s instead of 0805’s, even if you don’t need the space right now. ▶ Use a MCU with the most performance and RAM/Flash that is reasonable. Use a STM32 inst…

  • 2025-06-18

    🔄 When to update application dependencies?

    Most modern languages (Node.js, Python, Rust, Go, Zig, Elm, etc.) have their own package manager. So when should we update package dependencies? How about at the beginning of every PR cycle? I’m working on making this my standard practice when starting a new feature in an applica…

  • 2025-06-16

    ➡️ Frontload the boring stuff

    Some examples: Think about and write tests before implementing a new software feature. Automate deployment of a new service before developing it. Create eCAD libraries before doing the schematic/layout work. Document the architecture before implementing it. Open a PR before doin…

  • 2025-06-06

    🌿 A natural way to get more testing/automation

    One thing I’ve noticed is when I release more frequently, I tend to automate. If releases only happen once every year, it is easy to neglect automation, CI/CD, etc. Automated tests are not needed as it is just quicker to manually test everything. But, with frequent releases, ther…

  • 2025-06-05

    🌒🌓🌔The four phases of product development

    Each phase is produced by someone or something. And the problems arise when we mix up who does what. Great/innovative ideas usually don’t come out of a committee. Truth is a solo pursuit. Evaluate ideas in meetings, but don’t try to come up with them there. When a team is involv…

  • 2025-06-04

    ⏩ Get on with it ...

    While many great ideas and algorithms germinate in deep work and solo thinking, bringing a modern product (especially one containing software) to life require many iterations with feedback and learning. So lets propose a new release every week. But, the common objection is: we ca…

  • 2025-06-03

    👥 Who are users?

    To get really valuable feedback, we need users. If the product has not been released yet, find someone – external CI system, CEO, beta users, manufacturing people, accountants, your mom … Often, when it leaves the developer’s computer, we find it does not even build, let alone ru…

  • 2025-06-02

    ♻️ How to define an iteration?

    I’ve found it useful to define an iteration as a formal release (software that is packaged and users use, a PCB that you build, a prototype, a web app that you deploy, etc.). You don’t learn many things until you build and, more importantly, others use - even if your users are on…

  • 2025-05-29

    🧑‍💻 How can we increase developer productivity?

    “The way you get programmer productivity is not by increasing the lines of code per programmer per day. That doesn’t work. The way you get programmer productivity is by eliminating lines of code you have to write.The line of code that’s the fastest to write, that never breaks, th…

  • 2025-05-28

    📈 What is the quickest way to store and track data?

    Do you need a quick way to track some data? Serial numbers, part numbers, test results, defect metrics, etc.? There are many ways, but one of the quickest and most flexible is CSV files in Gitea. You are already using Git*, right? With CSV files in Gitea, you can: View the data …

  • 2025-05-27

    🌱 OSS can decrease or increase your code liability

    A wise person once said: “Code is a liability, not an asset. Aim to have as little of it as possible.” Whether the open-source code in your projects is an asset or a liability depends on how you handle it. Almost all code in complex systems needs to be maintained. If you do not…

  • 2025-05-23

    🤝🔍 Trust, but verify

    Apparently, this is an old Russian proverb that Ronald Reagan popularized. This is good general advice in life – don’t automatically distrust people and go looking for problems, but when something does not look or feel right, verify. As engineers, when we are building something n…

  • 2025-05-21

    🌽 What is the easiest way to avoid silos?

    Silos occur when a person or group of people operate in isolation from the rest of the organization. One of the reasons you have failure in organizations is one silo does not know that the other silo is doing. Silos are deadly in our organizations. How can we avoid them? The effi…

  • 2025-05-20

    🤖 The biggest problem with AI

    “It ain’t what you don’t know that gets you into trouble. It’s what you know for sure that just ain’t so.” - Mark Twain (maybe) AI is really good at summarizing existing information. It is less good at thinking, although it can do some amazing things. The biggest deficiency I se…

  • 2025-05-19

    🤖 What is AI good for?

    AI is really good at summarizing existing information – Perplexity Pro mostly has replaced Google/Duckduckgo, etc., and is worth every penny. AI is really good at finding API documentation – much quicker than searching through docs, and often provides a useful snippet of how to u…

  • 2025-05-16

    📝 What is my process for capturing experience? (part 3)

    Reflection is another important aspect of the experience capture process. Do we carefully evaluate and critically think about what happened? We don’t do this to blame ourselves or others, but rather to recognize areas where we might improve. Reflection can also include recognizin…

  • 2025-05-15

    📝 What is my process for capturing experience? (part 2)

    In part 1, we discussed the importance of getting information into permanent mediums. Below are a some that I use: Workflowy. This is my 2nd brain with 1000’s of notes, links, howtos, etc. It is easy to share Workflowy notes with others as needed and multiple people can collabor…

  • 2025-05-14

    📝 What is my process for capturing experience?

    After yesterday’s post, I was asked: “What’s your process to capture experience?” The most important thing is to get information out of transient mediums into permanent mediums. What are the attributes of a permanent medium? Searchable Persistent (exists over time, backed up) Ea…

  • 2025-05-13

    🧠 How to leverage experience?

    To leverage experience, we need to capture it. And to capture it, we need process. Without this, leveraging the experience of our best people is at best random. If we can capture experience, then we have it forever, even when our best people inevitably move on.

  • 2025-05-09

    🔭 How to encourage vision?

    Innovation is fueled by vision. Without vision, things can be directionless, drifting toward obscurity. So, how to encourage vision? Perhaps the first thing is not to discourage it. Ironically, the more successful an organization is, the more likely this is to happen. This happen…

  • 2025-05-08

    🧠🔭 The tension of experience and vision

    🧠 Experience: Guardrails for our journey, temperament for our actions. 🔭 Vision: The view of where we are going, the source of energy and enthusiasm for our enterprise. Experience is negative, a restraint. Vision is positive, a motivator. Both are necessary in the right balance. …

  • 2025-05-07

    🛣️ Two approaches to life

    There are two ways we can approach life: Take responsibility and try to solve some of our own problems. Expect others to solve all of our problems. Some examples: Owning the integration points in our product vs. outsourcing everything. Critically evaluate what we hear vs. blin…

  • 2025-05-06

    🏆 The entire story

    In debates about technology, people bring up points, such as an Arch Linux update occasionally breaking and not booting; thus, Arch Linux is bad. While the above point is true, it is also irrelevant because it is not the entire story. What about: The hours upon hours I’ve saved…

  • 2025-05-05

    👤 It's all about the people

    It is very true, we need great people in our organizations. And I have the utmost respect for those who can motivate and lead people. I also have the utmost respect for the capabilities of humans – that divine spark of creativity and the ability of the human brain to solve proble…

  • 2025-04-29

    🧠🔭 Experience and Vision

    In the realm of product development, there are two powerful forces – experience and vision. Experience (the past) is a guide – a help to avoid serious blunders and mistakes. Experience can help us avoid dead-end tangents. Experience gives us a gut feel that is critical at times. …

  • 2025-04-28

    📊 Past performance ...

    “past performance is not indicative of future results” The above phrase is a disclaimer we often see associated with investments. However, this applies to more than investments … A technology that was cutting edge in the past may not be the best option for the future (example b…

  • 2025-04-25

    ✔️ Legacy code

    Michael Feathers defines legacy code as code without tests. He further elaborates in his book: “Code without tests is bad code. It doesn’t matter how well written it is; it doesn’t matter how pretty or object-oriented or how well-encapsulated it is. With tests, we can change the…

  • 2025-04-24

    🚀 Git driven CD -- you know what got deployed

    Git driven CD (Continuous Deployment) typically means whenever you merge to main , or tag a repo, something automatically gets deployed. It can be something as simple as a static website being updated. One of the biggest advantages to this is that you know for sure the code was c…

  • 2025-04-23

    💸 Technical debt

    I like the definition of technical debt from this article: Technical debt is anything that slows down your ability to update and upgrade your work

  • 2025-04-22

    🛠️ Another reason to self-host Gitea

    You own your data – forever. You don’t need to keep paying monthly fees if you decide to switch to a different system just to access your historical data and conversations. I’ve been advocating that development discussions should happen in Git* issues/PRs/projects whenever possib…

  • 2025-04-21

    👷 The tension between solo and collaborative work

    As systems become more complex, we emphasize collaboration more and more. But we must also remember that truth is still largely a solo pursuit. Truth by committee is almost an oxymoron. The new algorithms, the keen insights, and the disruptive inventions are usually not the work …

  • 2025-04-18

    🕹️ What can we control?

    There are some things we can control: Products have a robust field update mechanism. Automated testing is in place. We have automated deployments. We have processes to quickly and confidently make and release hardware changes. And some things we can’t control: A customer askin…

  • 2025-04-17

    😩 Boring, error-prone, repetitive, tedious work

    Some examples: manually testing software manually constructing a bill of materials searching your email for some bit of information scrolling through logs looking for potential problems manually configuring a new server manually deploying software updates manually checking for s…

  • 2025-04-16

    🧑‍💻 Will AI cause coding to disappear?

    AI is not a binary off/on thing, like many of the industry commentators like to think. Many of us are already using AI to improve our productivity. For me, Perplexity has largely replaced Google search. Technology has always brought productivity gains: ASM -> C -> Code gene…

  • 2025-04-15

    Survey of device ID mechanisms

    Are you implementing an IoT system that requires you to identify many connected devices? This post reviews different types of IDs and provides some technical details to help you decide if any of these are appropriate for your application. Note: some of the below information was …

  • 2025-04-15

    ✅ Guarantees

    Sometimes we want guarantees: Are you sure this will work? Can we lock this down to a rock-solid stable release? Is it fully tested? Will this vendor be able to provide this part forever? Do we have all the features the product will ever need? The reality is that in complex sys…

  • 2025-04-14

    🔄 The 2nd key to effective process

    If the people at the top don’t use the process, hardly anyone else will either. What we do often speaks way louder than what we say. (1st key …)

  • 2025-04-11

    🛠️ Git* -- the new standard for workflow

    It started with Github, a place to host your OSS projects. Over time, several other options emerged, and each has its place: Github: excellent for OSS projects where you want to attract the most developers. Gitlab: great for a large hosted enterprise solution. Gitea: a great sol…

  • 2025-04-10

    🛠️ The defining characteristic of a good workflow tool

    As mentioned in the previous post, modern workflow tools provide efficient access to information, collaboration, and automation. The real power is when these three things come together in one environment. The defining characteristic of a good workflow tool is … integration. There…

  • 2025-04-09

    🛠️ The critical features of workflow tools

    Tools are what enable knowledge work in the information age. Several critical features: Efficient access to information Collaboration Automation We’ll discuss more in the future posts …

  • 2025-04-08

    How to implement Zephyr web applications

    Are you considering implementing a web UI in your Zephyr RTOS application and perplexed by the endless number of web technologies available today? This article traces my journey through trying several options and presents some of the tradeoffs. Modern microcontrollers (MCUs) hav…

  • 2025-04-08

    ✉️ Email filters

    Email is an amazing technology – the only widespread decentralized communication tool we have. But most of us are flooded with email. The fundamental problem is when we get emails from so many different sources, projects, and contexts flowing into one inbox. The context switching…

  • 2025-04-07

    👥 Everybody Works and the impact on meetings

    In a recent podcast titled Everybody Works, the owners of a 60-person company discuss the impact of full-time managers and one of them is more meetings: And the primary problem with management is when it’s full time and it’s only that it can’t do anything by itself. So the way 4…

  • 2025-04-04

    👥 Efficient meetings

    There are a lot of good ideas for effective meetings: Whose meeting is this? A simple checklist Who has time for meetings? There are good reasons to have a meeting (hanging out, brainstorming, setting priorities, making decisions), but in this age sharing information is probabl…

  • 2025-04-03

    👥 Meetings and human relationships

    Improving human relationships is sometimes used as a justification for meetings, and face-to-face meetings can certainly improve human relationships. But more generally, we can say that positive interactions improve human relationships. And the more positive interactions we have,…

  • 2025-04-02

    👥 Why meetings?

    There are many reasons to call meetings: Accountability Knowledge transfer Transparency Status Review Oversight Improve/maintain relationships Brainstorming However, in this age of excellent collaboration tools (Git workflows, project boards, etc.), meetings are an inefficient …

  • 2025-04-01

    ⚖️ Horizontal vs Vertical Scaling

    In the context of product development: Horizontal Scaling: Selling more units, getting more customers. Vertical Scaling: Add value to already sold/deployed units. Bigger vs. Better – both are valid ways to scale and produce value. In this age of powerful connected devices, vert…

  • 2025-03-31

    👌 Struggling to scale your IoT system? Simplify your data.

    I recently published a new blog article about IoT data. Have you struggled with adapting your IoT system to new applications and requirements? Is handling configuration updates at both the cloud and edge a challenge? Is synchronizing required data between cloud and edge instances…

  • 2025-03-29

    Struggling to scale your IoT system? Simplify your data.

    Have you struggled with adapting your IoT system to new applications and requirements? Is handling configuration updates at both the cloud and edge a challenge? Is synchronizing required data between cloud and edge instances a challenge? This article describes a simple way to mod…

  • 2025-03-28

    🔄 The secret to process

    Process/workflows/tools should be good enough that they help the people doing the work. They are not just an administrative tool. Some examples: Git helps me manage my own work, so I use it even on personal projects where collaboration is not needed. Gitea issues are so fast and…

  • 2025-03-27

    ⚙️ Fix systems, not people

    We can rarely “fix” other people. Short of a divine conversion experience or a life-changing event, people don’t fundamentally change, no matter how much we plead, beg, threaten, cajole, encourage, etc. Certainly, some are more gifted with the ability to motivate, nurture, and me…

  • 2025-03-26

    📈 Scaling

    We often think of scaling as growing a company’s size or the number of units sold/deployed/etc. That is one way to provide value to the world. However, there are other ways to scale: improving the experience improving reliability/security new markets deploying updates to existin…

  • 2025-03-25

    🌅 Simple stuff is boring

    That may be. But doing the simple stuff well is also rewarding. And which is better: exciting or rewarding? To do the simple stuff well feels good. It feels right. That is because it is right. And what gets the simple stuff done? YOUR Platform.

  • 2025-03-24

    👌 The simple/basic things are the most important to get right

    It pretty much any endeavor, consistently doing the simple things are what make the difference. Doing simple exercises consistently. Eating whole foods. Not overeating. Taking time to share and communicate. Showing up. Being on time. Meeting commitments. Not overcomitting. Using…

  • 2025-03-21

    ✅ The problem with software

    I’m currently reading The Checklist Manifesto by Atul Gawande. Gawande is a surgeon who wants to find a way to reduce the mistakes and their catastrophic consequences during surgery. So he investigates other industries such as air travel and the construction of large buildings. …

  • 2025-03-20

    🌻 Downstream, things should be better

    For everyone downstream of us who uses or is influenced by what we create or do, things should be simpler/better/easier – because we did something. This is the formula for creating wealth. The alternative is that we produce no value for others. It would be easier for someone to d…

  • 2025-03-19

    🪙 Complexity and Simplicity -- two sides of the same coin

    To get to simple for someone, it often has to get more complex for someone else. An elegant, easy to use UI was a lot of work for someone to design. A powerful, modern programming language that makes it easy for software developers was no doubt very complex to implement. Modern C…

  • 2025-03-18

    ⬆️ The business case for improvement

    As discussed previously, improvement is sometimes hard – really hard. So how do we justify it? The payback comes when we improve something once, and then something else gets lots easier many times. An example might be automating a release process. If it takes 1 hour to manually d…

  • 2025-03-17

    ⬆️ The path of improvement

    Improvement is not always easy, actually it is usually hard – really hard, and sometimes a complex path. But in the end, something likely got simpler for someone. Getting to complex is easy and the natural state of things (chaos). The path and the resulting state are two differen…

  • 2025-03-14

    ⬆️ What is improvement?

    Improvement often means something got simpler for someone: We refactored the code and it is now easier to read. The build system is more reliable. The automated tests are better, so less manual testing is needed. The documentation is better, so it is easier to understand somethi…

  • 2025-03-13

    👷 Make less work for others, part 2

    A few examples of how to make “less work” for others: try not to introduce bugs or break stuff communicate in workflows like Tickets/PRs where there is context and messages can be easily processed document your work – including “why” focus on the business priorities be self-dire…

  • 2025-03-12

    👷 Do we make more work for others or less?

    This question really gets to the heart of our value to others. In everything we do, we need to think – am I delivering this work or information in a way that is easy for others to understand and use? Or do they need to do a bunch of unneeded/extra work? Organizations composed of …

  • 2025-03-11

    🔄 The business model for updates

    In the old’n days, a project was shipped and done, and we moved on to the next one. However, with modern connected systems, we can deliver a lot of value after the initial release. Most of our engineering effort may be spent after the initial release maintaining and improving a p…

  • 2025-03-10

    🔄 What is the best software release frequency?

    Different projects/products have different needs, but generally the trend in our industry is to release new software more often. There are several reasons for this: Modern processors (even embedded microcontrollers) are very powerful and expandable, so it is possible to add addi…

  • 2025-03-07

    🚀 How can Arch Linux get by without releases?

    Arch Linux does not have discrete releases – it is a rolling distribution where individual packages are continuously updated. Most people still raise an eyebrow at the mention of Arch Linux – how can that possibly work and be stable? Having run Arch for many years, I can affirm i…

  • 2025-03-06

    ⚖️ Truth is discovered, not invented

    I once advised a young man – If you have some down time on a plane, in a hotel, etc., you might consider writing an essay or two about some of the issues facing you personally, or your organization. This is one of the best ways to think and discover truths. I’m often surprised an…

  • 2025-03-05

    🔗 Connected systems are different

    In distributed computer systems, change is the constant. Because a system can be networked, its capabilities are endless. The ability to connect to new and different systems means new systems (and value) can always be created, and things will change. If you don’t, somebody else w…

  • 2025-03-04

    🛡️ How to get to secure and reliable

    The best way to get to secure and reliable software is to fix the core issues. If your programming language is not reasonably secure and reliable, adding more external tools to check and track down problems is helpful, but is likely not the most direct approach. Likewise with arc…

  • 2025-02-28

    🏭 Semi-structured part numbers

    Some time back I recorded a video on Semi-structured part numbers. https://youtu.be/tlsl01uxUfE Be more efficient. Make less mistakes. We tend to ignore simple things like part numbering systems. But doing the simple things right is what frees us up to work on the hard things.

  • 2025-02-27

    👤 Who is our "customer"?

    Your “customer” is someone who derives value and uses what you produce. Customers are both internal and external to your organization. While it is good to focus on the flow of primary business value to the end-customer (that is what pays the bills), we can also think of everyone …

  • 2025-02-26

    ⚠️ Toward a Theory of Medical Fallibility

    I recently skimmed an essay from 1975 titled Toward a Theory of Medical Fallibility. A few quotes from the article: Therefore, where there is scientific activity, there is a partial ignorance – the ignorance that exists as a precondition for scientific progress. And since ignor…

  • 2025-02-24

    🛤️ Two paths with experience

    As we gain experience, we can take two paths: learn from mistakes and all the things that went wrong, and apply this knowledge to do better in the future. assume because we’ve done something before the next time we do something similar it will “just work.” If I’ve learned anyth…

  • 2025-02-21

    🛤️ Two paths

    There are two paths we can follow as a team or an organization: what we do makes it easier for everyone else to do their job. what we do makes it harder for everyone else to do their job. #1 is the formula for scaling. #2 is the formula for stagnation and technical debt. And wh…

  • 2025-02-20

    👥 Your team as the customer

    Previously we defined our “customer” as someone who derives value from what we do. While it is useful to think of how the primary business value is flowing, hopefully we are providing value to our team as well as people outside our team. Some ideas: Are Git commit messages helpf…

  • 2025-02-19

    🚀 Why are releases important?

    Since many products/systems run software these days, they can be improved after the initial release. Most software projects have “releases” when a new version of the software is deployed or made available. Why are releases so important? Some reasons: Communicates to customers a…

  • 2025-02-18

    📄 Who is a changelog for?

    Most projects have releases, and with each release, we describe what is new/changed/fixed in a changelog file. keep a changelog has a lot of good ideas. Who is a changelog for? It is for our customers – those who use whatever we produce. The changelog communicates to our customer…

  • 2025-02-17

    👥 Who is the customer in organizational hierarchy?

    In a business organization hierarchy, where E (engineer) reports to M (manager), who is the customer in the E - M relationship? Our first inclination may be to think M is the customer – M is the boss, E should make M happy. But, lets think about this a bit more. Who does E create…

  • 2025-02-06

    👤 Confusion about when we are the customer

    In our modern, entitled, self-serving consumer culture, we tend to be confused about when we are the customer or not. If we work for pay, our job is to do something to benefit someone else – our customer. We are not the customer in this scenario, someone else is. We are supposed …

  • 2025-02-05

    🕊️ Simple -- from whose perspective?

    “Just keep it simple” – we sometimes hear this. But from whose perspective? Legal/IP Management IT Financial R&D Security Sustaining engineering Purchasing Manufacturing Quality Sales/Marketing Customer support End User/Customer How do we prioritize simplicity for the above…

  • 2025-02-04

    🕊️ Simple to maintain vs simple to implement

    Recently we talked about the tension between simple to use vs. simple to implement. Maintenance is similar. If you want something that is easy to maintain, you need to put in the work upfront. The Elm programming is a classic example of this. The initial coding takes longer than …

  • 2025-02-03

    🤝 Integrate early

    Integration is where we bring together separate parts of a system. When things come together, problems appear: performance problems, stability problems, electromagnetic noise issues, mechanical interference, incompatibilities, manufacturing issues, usability issues, aesthetic iss…

  • 2025-01-30

    🕊️ Simple to use vs simple to implement

    To make something simple to use, often it is not simple to implement. For example, in the SimpleIoT UI, the following line of code is all that is required to add a text input field to a node. No handlers need to be attached, etc. textInput Point.typeDescription "Description" "" H…

  • 2025-01-29

    🤏 Handling the small details

    We’ve discussed the necessity to fulfill your small commitments as a stepping stone for fulfilling larger commitments. We can expand this thinking – handling the small details well enables you to focus on bigger things. In product development, we have many details to be concerned…

  • 2025-01-28

    🛠️ Selecting tools

    There are many considerations when selecting a tool: will it do the job? what does it cost? can I get support? is there a community around it? will it be available and maintained long-term? what does the future look like for new features? is it accessible/available to others? T…

  • 2025-01-27

    🛠️ Two classes of tools

    There are two classes of tools: Personal tools and Common tools. A personal tool might be your editor – each developer has his own preferences and what editor one person uses does not affect another. However, it is important to have a common tool for formatting code. So you decid…

  • 2025-01-24

    📝 Documentation is part of the process, not an afterthought

    One of the best productivity hacks ever is to change your thinking about documentation. Most documentation is done after the fact, which is a rather distasteful task at this phase. If we learn to use documentation as part of our thinking/design/implementation process, it can be e…

  • 2025-01-23

    ✨ Demos vs. Products

    I’m a huge fan of demos – so is Khem. They are a very important part of product development. They are a way to ship early and get critical feedback. Demos during the course of real product development are essential. There are some challenges or risks with demos. One is that when …

  • 2025-01-22

    🧩 The three legs of YOUR Platform

    Automation – start with a checklist. Collaboration – #1 rule is don’t view email as a permanent place to store information. Process – the habits of your organization.

  • 2025-01-21

    🔍 The importance of small Git commits/pull-requests

    Why are small Git commits/pull-requests important? small changes are easier to review. Large PRs are painful to review, thus they tend to be rubber-stamped and not reviewed, or rejected in OSS projects. you get to ship more often. other people are motivated by seeing work get do…

  • 2025-01-20

    🎆 100 daily emails

    Today marks the 100th “daily” email I’ve sent out. (I don’t actually send on weekends, or days when I’m out of the office). Some observations: Daily is easier than weekly – I was skeptical when others said this, but I think it is true. If I skip a few days, it can be hard to get…

  • 2025-01-15

    🔁 The importance of Git Commit/Push often

    There are many forms of “shipping” your work as we recently discussed Shipping does not necessarily mean a product release, but rather releasing your work external to you. It can be a Git push, running tests in CI, a prototype, a document that others can read – basically somethin…

  • 2025-01-13

    💭 Thinking, Designing, Developing, Engineering ...

    If we are thinking without writing, are we really thinking? If we are designing without sketching/drawing, are we really designing? If we are developing software without iterations/testing, are we really developing? If we are engineering without building prototypes, are we really…

  • 2025-01-10

    🔧 envsetup.sh -- a very useful automation technique

    During a Android development stint, I learned about the envsetup.sh concept. This is a script that contains numerous functions get populated in a shell envrionment when the script is sourced. There two ways to source the file – you can type: source envsetup.sh Or use a ‘.’ for a …

  • 2025-01-08

    📧 Effective email is either a pointer or notification

    Email is the only decentralized communication platform that has widespread usage. And this is more amazing considering it was invented in 1971. Email is an amazing technology and has stood the test of time. However, there are challenges with email: It can be difficult to find in…

  • 2025-01-07

    🎓 The problem with experts

    At a recent family holiday gathering, we happened to be discussing how crazy family life gets at times – you are halfway through cooking something and realize you don’t have the ingredients on hand, so you need to improvise. Some of the men in the group described how they always …

  • 2025-01-06

    🍳 Preparation - lessons from the kitchen

    Most Sunday mornings, I make gluten-free waffles for breakfast (see recipe at the end of this post). I like to get everything out (ingredients and utensils) before I start. This seems to make the process go faster and smoother. There is an efficiency in focusing on getting every…

  • 2025-01-03

    😊 Joy

    Platforms help bring the joy back into engineering. How? – by assisting you with the tedious error-prone tasks, and freeing you to focus on the valuable creative work. Satisfaction comes from being useful and creating value. We need to get to the place where we can do that work.

  • 2025-01-02

    🪞 Platform reflection

    How has YOUR Platform done this past year? Have you burned down technical debt? Have you automated repetitious or tedious tasks? Is your test coverage increasing or decreasing? Are you releasing more often? Are deployments getting easier? Are you deploying with more confidence? I…

  • 2024-12-27

    🙏 Humility

    An essential mindset for platform thinking is humility – the realization that we as humans are finite, we make mistakes, we don’t always perform at the same level, we get lazy and tend to take shortcuts. YOUR Platform can compensate for much of this as it does the boring tedious …

  • 2024-12-23

    🔄 The biggest benefit to frequent updates

    Perhaps the biggest benefit of frequent updates is that the changes are small, making them easier for humans to absorb and adapt to. The conventional wisdom in our industry is that frequent updates mean things are always breaking. This has not been my experience; rather, things a…

  • 2024-12-20

    📅 Dates in filenames

    One of the most common labels we use today is dates. We use them in file names, reports, database fields, etc. There are many ways to enter a date: 2024-12-20 20 Dec 24 12/20/2024 20/12/2024 Dec 20, 2024 etc. RFC 3339 (YYYY-MM-DDTHH:MM:SS+HH:MM) is increasingly becoming an inte…

  • 2024-12-18

    🔄 Lifecycle management in dynamic systems

    One of the hard parts of dynamic systems is the lifecycle management of various bits of running code. It is easy to create stuff, but are you cleaning up properly when things disappear or change? We can order these in difficulty: Create something: (easy) Delete something: (hard)…

  • 2024-12-17

    🧪 Abstractions and Platforms

    I’ve come to appreciate the Go communities advice on abstractions. Avoid creating abstractions prematurely. Every abstraction has a cost, and often duplicated code is simpler and easier to maintain than a premature abstraction. Don’t take DRY (Don’t Repeat Yourself) to an extre…

  • 2024-12-16

    🤝 Keeping commitments

    When we commit to something, do we follow through? How do we get better at this when we always have more to do than time to do it? The thought came recently that it probably starts with keeping commitments to ourselves, which is the essence of self-discipline. If we can’t keep pr…

  • 2024-12-13

    📝 Personal vs. collaborative documentation

    Yesterday, we discussed the importance of a personal note-taking tool. We can also extend this concept to a team or company using Wikis, Markdown in Git, shared Google Docs, etc. Collaborative documentation is very valuable – IF you can get group participation. Over the years at …

  • 2024-12-12

    🔧 What is your most important tool?

    Your editor? Your CAD tool? Your 2GHz oscilloscope? Your phone? Your computer? In the information age, we are flooded with information and opportunities. Many of the problems we solve are ones we’ve never seen before, or at least not very often. Most of us have more to do than we…

  • 2024-12-11

    📧 Inbox zero

    Thanks to a nudge from Khem, I’m back to Inbox-zero. The big question is what to do with emails that need action or have valuable information in them? Some put them in a special folder. Others tag them. Others forward them to lots of people. The best solution is to move the actio…

  • 2024-12-10

    🏆 Goals vs. Systems

    “You do not rise to the level of your goals. You fall to the level of your systems.” – James Clear, Atomic Habits Goals and vision are important, but we also need a way to get there.

  • 2024-12-09

    🏁 Easy to start vs. easy to finish

    There are many ways to classify how we do things. One way is “easy to start” or “easy to finish.” We may try to use off-the-shelf “maker” style embedded boards (Arduino or Raspberry PI) instead of a SOM (System-on-module) designed for industrial use. An interpreted language like …

  • 2024-12-06

    🎧 Use a headset optimized for calls

    One thing most of us do routinely is voice calls or video conferencing. For this to work, each party needs to have a microphone and a speaker. The simplest setup is to use the microphone and speaker built into your phone, laptop, or car. Sometimes this works pretty well. But, oft…

  • 2024-12-05

    ⚡ Are your processes proactive or reactive?

    There are two ways to implement a process. The traditional way is as a check to make sure people did everything right. This could be required documentation that is written after a project is finished, a separate QA department that runs tests after each release, or various certifi…

  • 2024-11-27

    ⚖️ Architecture vs. Optimization

    In 1968, “The Art of Computer Programming” by Donald Knuth was published with the following quote: “We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.” This was in the age when computer resources were scarce. We…

  • 2024-11-25

    Creativity

    “Creativity is just connecting things. When you ask creative people how they did something, they feel a little guilty because they didn’t really do it, they just saw something. It seemed obvious to them after a while. That’s because they were able to connect experiences they’ve h…

  • 2024-11-22

    🔗 Coupling

    Good platforms emphasize loose coupling where one part of the system can change without affecting another. Not abstractions for the sake of abstraction. But rather well-thought-out data structures and patterns. A message bus like NATS is an excellent way to decouple a program. On…

  • 2024-11-21

    ⏰ A platform stuck in time

    Vintage is great in some contexts—I like old woodworking hand tools. Even in our modern jobs, some vintage tools, like a pencil and paper, are still very useful. But information technology moves forward, and we rarely benefit from using decade-old phones, computers, programs, etc…

  • 2024-11-20

    🧪 What is a good abstraction?

    When writing a program, abstraction is a powerful tool. Every abstraction has a benefit and a cost. Hopefully, the value > cost. There are good abstractions and bad abstractions. Good abstractions break things down into simpler steps that others can understand. Bad abstraction…

  • 2024-11-18

    ⚡ Improve development efficiency, reduce technical debt

    The term “platform” can mean a lot of things, but this is primarily what I’m talking about in the context of product development: Improve development efficiency, reduce technical debt Some examples: do more with what you have iterate faster make less mistakes regularly up…

  • 2024-11-14

    🎯 Rituals and Culture

    Recently, we discussed personal habits. Organizations have habits too – we call them rituals and culture. How does the organization react when things don’t go as planned? How does the organization motivate and demotivate people? How does the organization encourage openness and tr…

  • 2024-11-13

    📈 Two ways to scale

    Scaling is the goal of many businesses – grow revenue, serve more people, sell more devices, grow the product line, etc. There are two ways to scale: Increase volume with a small number of direct customers. You might be making an integrated circuit that is sold to a company mak…

  • 2024-11-11

    🔍 How to get the little things done?

    Previously, we discussed habits. Habits are the way we get the small, but important, things done. Some people are naturally neat, organized, and focused – I’m not. Stuff tends to pile up in my workspace and I don’t even notice it. One thing I’ve been using some is the Pomodoro te…

  • 2024-11-08

    😊 How can you make your commercial source code customers happy?

    When engaging with a community around an open-source project, Github is likely the lowest friction option. It makes sense. But there are other scenarios – one is where you are delivering closed-source commercial source code to customers. Git makes sense for delivering any source …

  • 2024-11-07

    🚀 Platforms vs Architecture Astronautics

    The excellent Superstruct Manifesto addresses the tendency for developers to want to “rewrite” things, wholesale switch to new frameworks, jump on new tech, etc. vs. delivering real business value. Another description for these people is Architecture Astronauts. Platforms, at lea…

  • 2024-11-06

    💪 Habits -- a critical ingredient in YOUR Personal Platform

    We defined your platform as the collection of technology, tools, and processes that enable you to differentiate and consistently deliver your products and services. At a personal level, habits are critical – they enable us to do the boring/hard stuff that makes us effective. Gett…

  • 2024-11-05

    🚀 Advanced technology and small players

    Integrated circuits (IC) vary widely in complexity from the small devices that are easily documented and understood to complex beasts that would require a stack of books and years to fully document. If you are a high-volume manufacturer of consumer goods, you can easily get all t…

  • 2024-11-01

    What can kids teach us about platforms?

    When helping my children with math, one of the biggest struggles is to teach them to break math problems into small steps. They are smart and think they can do it in their head, and inevitably make mistakes because everything gets muddled. When you break a math problem into steps…

  • 2024-10-31

    🏛️ What are the pillars of a good platform?

    Simplicity - you can make changes when needed, and understand the system enough to do so. Consistency - useful patterns are reused throughout the system where appropriate. Reliability - the design/implementation is sound and there is enough testing that you don’t worry too much w…

  • 2024-10-30

    🛣️ Kayaks and Platforms

    Recently we purchased a few used kayaks that had been built 20 years ago from Pygmy Boats kits. (Unfortunately, Pygmy is not longer supplying kits, but similar kits can be purchased from Chesapeake Light Craft) We had the pleasure of visiting with the former owner (Mike) for an …

  • 2024-10-29

    💻 What is the purpose of technology?

    To do more with less effort. To simplify our tasks. Sometimes this backfires and technology ends up giving us more to do and complicates our lives. It becomes a monster and we are consumed feeding it. Thus, the selection and implementation of technology is critical. How do you ob…

  • 2024-10-25

    ✨ The easiest path to reliability ...

    … is simplicity. Not that we dumb things down and avoid new technology. That is false simplicity. As we discussed previously, the problem is most often not with the underlying technology, but rather the stuff we do. Therefore, if we can simplify what we do, it will get better. Th…

  • 2024-10-24

    🔍 Where do reliability/stability problems typically come from?

    99% of the time, system bugs/problems come from the stuff you do. The code you wrote. The hardware you designed. The system you configured. The custom PRC system you created. Rarely are we affected by stability problems in the Linux kernel, the Zephyr RTOS, an OSS library, or a b…

  • 2024-10-23

    🔝 Support from the top

    In a recent discussion with Matthew Rassi about Lean, I asked Matthew if he has ever witnessed Lean being successful in organizations where there is not support at the top. He answered with a resounding no. Likewise, I’ve never observed “Platform Thinking” being successful compan…

  • 2024-10-22

    🎯 Doing more with less, rather than less with more

    Building your platform does not mean you need to invent a bunch of stuff from scratch, or purchase expensive tools. Rather, it is making better use of what you already have. Automating your current workflows and deployment. Reusing the designs and IP you already have. Increasing …

  • 2024-10-21

    🆘 How to ask for help

    Modern systems are too complex for any of us to know everything about them. Many of the problems we encounter we have never seen before. Communities built around various technologies are what fill this gap. So the superpower in this age is first having the humility to ask for hel…

  • 2024-10-18

    🔧 How to keep a product maintainable?

    How do you know if you have the ability to maintain your product? With complex systems, having all the design files and source code does not always mean a lot. Do you know how to build the source code? Do you know why the hardware is designed the way it is? Do you know how to tes…

  • 2024-10-17

    🤝 What happens when someone else tries to use your work?

    It does not build on machine X … It does not work in scenario Y … It is hard to understand by developer Z … As developers, we naturally avoid the rough edges of whatever we are working on – it hurts. When other developers try to build/run our stuff, it is amazing what they find. …

  • 2024-10-16

    📌 Where do you put stuff?

    There are a lot of ways to organize product development information. You could do something like: productA firmware hardware yocto-build docs manufacturing productB firmware hardware yocto-build docs manufacturing The above is nice in that it keeps all the stuff for each …

  • 2024-10-15

    🌱 When edge nodes grow up

    Yesterday we discussed how to partition functionality in hierarchical distributed systems. In the past, it was difficult to do much at the edge nodes because they could not do much. Resources were limited. It was difficult to update software in them without being on-site and conn…

  • 2024-10-14

    🔠 How do you partition systems?

    In modern networked systems, there is often the debate how to partition the system. Below is one example where you have three levels: cloud, gateway, and IO (input/output) nodes. All of these devices have a processor and can run software and do stuff. So where do you do stuff? T…

  • 2024-10-10

    🏷️ How do you consistently name things?

    There are only two hard things in Computer Science: cache invalidation and naming things. – Phil Karlton Plenty of opinions abound on style, naming conventions, formatting, etc. But there is one principle I try to follow when naming things – go from general to specific. Example:…

  • 2024-10-09

    🔄 How can we be more consistent?

    What does not work very well is long standards and endless code reviews where we shame people into compliance. There are better ways. We now have tools that can proactively format our code. We have linting tools that check things. Use them. Even if no one else reads our code, the…

  • 2024-10-08

    🔄 Does consistency matter?

    If you have a single developer on a single project, then perhaps consistency does not matter too much. However, if you want to scale, either products or developers, then consistency matters. Why? So that code does not get drastically reformatted every time someone makes a change,…

  • 2024-10-07

    🎲 Isn't it risky to update your dependencies?

    This is a common objection I hear when building industrial systems: “We want to lock things down to a super stable/tested LTS (Long Term Support) release and then stay on that release for a long time – it’s risky to update dependencies.” Is it? How often do you update your browse…

  • 2024-10-04

    🏗️ Platforms are for building systems

    If you are building a one-off, non-connected device, you can get by without a platform. This is why so many design-shops don’t get platforms – they are designing something then moving on to the next project. But if you are building a connected system, you have a much bigger probl…

  • 2024-10-02

    💸 The cost of updating dependencies, or not

    As developers, we are often lazy when it comes to updating dependencies. A short-term productivity hack is to not update them. Leave our Yocto build at an old version. Never touch go.mod or package.json – everything is working and I can keep focusing on coding features. Don’t upd…

  • 2024-10-01

    🆚 What is the difference between YOUR Platform and other platforms?

    We all use other platforms – operating systems, cloud services, middle-ware, hardware modules, etc. It is tempting when building a product to piggyback entirely on someone else’s platform (AWS, .NET, one of the 100’s of IoT Platforms, etc.) Society tells us – you can’t host your …

  • 2024-09-27

    💪 Good enough is not good enough

    My grandfather had this sign on his desk for years, and it embodied his philosophy for work. He did things right. He read manuals for his equipment cover to cover. He understood how things worked. And because of this, he could fix and maintain machines. Lots of people brought the…

  • 2024-09-26

    ⚠️ When things go wrong ...

    What do we do? Do we focus on who/what to blame? Or do we figure out a path forward. How we are going to prevent this problem in the future? Not by shaming someone into paralysis, but by fixing the process. By improving YOUR Platform. The opportunity for the individual/organizati…

  • 2024-09-23

    🚀 Do you own your deployment?

    Saturday morning, I got a call from a customer – something was not working due to a bug we had deployed Friday (no we don’t have very good tests) 🤫. The fix was easy, I tested it locally, and then tried to push it to a Git hosting service we are using, but the Git service was dow…

  • 2024-09-20

    🔧 What will you improve today?

    Platforms are all about improvement – at the personal, team, and company levels. One approach is to each day write down something you are going to improve and set aside a small block of time daily to work on it. Make this part of your personal process. This does not have to be so…

  • 2024-09-19

    What is the role of vision?

    Yesterday, we discussed the difficulty in predicting the future and the folly of “just-in-case” development. However, we should not discount the need for vision – the sense for where we need to go in the future. Not necessarily specifics, but a gut-feel for where things are headi…

  • 2024-09-18

    🔮 Preparing for the future

    Yesterday, we discussed a fundamental characteristic of a platform: it will go places you never imagined. How do we prepare for this? There are two ways: Try to predict where things will go in the future and build specific features into your platform now – just in case … Build t…

  • 2024-09-17

    ✅ The Platform Test

    How do you know if you own YOUR Platform? If a customer needs a new hardware interface or connector on a product, can you easily add that? If a security vulnerability is found in a piece of software in your stack, can you fix it? If a customer wants to use a new USB peripheral in…

  • 2024-09-16

    🤖 What is the role of AI in your platform?

    We hear much today about how AI is going to do our jobs better than us. AI is powerful and has access to a lot of information and does a lot of things humans can’t do. It is really great at writing shell scripts, boilerplate in programs, figuring out how to use an API, summarizin…

  • 2024-09-06

    🔄 What is the first thing you should implement?

    When building a new system, what is the first thing you implement? There are a lot of approaches – one is to implement a minimal proof of concept. However, I think an easy way to update software in any part of the system (Linux edge devices, microcontrollers, cloud applications)…

  • 2024-09-05

    🚫 No Golden Machines

    As humans, we can become attached to “golden” machines. A very expensive bicycle set up just right, a well-tuned tool, a nicely configured workstation, a server that we have set up just right … We like buying expensive things or the iterative process of tweaking things just right…

  • 2024-09-04

    🙋 How to help yourself?

    Did you ever have the experience going back into a project you have not touched for 6 months – why did I make this change? Or did you ever struggle to get all the dependencies installed to build a project you wrote? Or did you ever wonder – will this change break something I’m no…

  • 2024-09-03

    🔎 Seeing patterns

    Patterns are important. Seeing patterns allows us to simplify things by using common data structures, re-using code/design, finding solutions to common problems, etc. Being able to see patterns also allows us to troubleshoot effectively. But, to see patterns, we need to have hist…

  • 2024-09-02

    🗝️ What is the best tool for private Git repos?

    Several days ago, I made a case for using Github to engage users around your OSS project. But is this the hammer you should use to drive every nail? For private projects, I think Gitea is actually better in most respects. It is very fast, clean, and most of the basic functions wo…

  • 2024-08-30

    🐶 Lessons from a 1-year old dog

    As I was going through my morning routine with our 1.3 year old dog, Reese, who is very energetic, it occurred to me how well short training sessions every morning are working. A 12hr session with her once a month will do virtually nothing. Improvement is not really what my dog w…

  • 2024-08-29

    🔍 Solving problems or symptoms?

    The following quotes from the book “The One-Straw Revolution” caught my eye: The more elaborate the countermeasures, the more complicated the problems become. … When a decision is made to cope with the symptoms of a problem, it is generally assumed that the corrective measures w…

  • 2024-08-28

    🐙 Github and why does it matter?

    For the last two days, we have been discussing aspects of several high-quality Yocto BSPs. Another characteristic of these three BSPs is that they are all hosted on Github. Yes, there are many other platforms you can host Git repositories on. You can easily do your own Git hostin…

  • 2024-08-27

    🔁 Tracking upstream and why does it matter?

    Yesterday, we discussed three Yocto BSP layers that are exceptional: meta-tegra (69 contributors) meta-freescale (174 contributors) meta-raspberrypi (157 contributors) The above three layers make an effort to keep up with upstream developments. This may mean regularly merging u…

  • 2024-08-26

    🔧 What makes a good Yocto BSP?

    As we evaluate technology to use in our platforms, Yocto Embedded Linux BSPs often come into the mix. Recently we talked with Matt Madison, who maintains the meta-tegra BSP layer, which provides Yocto support for Nvidia’s embedded processors, which are increasingly becoming popul…

  • 2024-08-23

    ⏰ The present or the future?

    Planning has its place – we need a vision for where we are going. But YOUR Platform is best focused on the present, not the future. Because the future of a complex system is pretty hard to predict. When we focus on improving our current efforts with refactoring, testing, automati…

  • 2024-08-22

    👥 Platform != People

    The right people in your organization is absolutely essential – no question about that. And dealing with “people issues” is a critical and essential skill. But, if your organization is dependent on a star individual and you are in big trouble when he/she is gone, then you don’t h…

  • 2024-08-21

    ✅ What is the simplest form of automation?

    The simplest form of automation is a checklist or playbook. If there is something you need to do more than a couple times that involves multiple steps, a checklist is a great place to start. Then we no longer have to dread doing a multi-step task because it is easy – all we need …

  • 2024-08-20

    📈 How does your product value increase after the initial sale?

    How does your product increase in value after the sale? Software/Firmware/Cloud updates. Software is soft for a reason – it is meant to be changed, improved. And sometimes we install “apps” to add new functionality. And with this improvement comes increased value. It is kind of l…

  • 2024-08-19

    ⚠️ Hack-it, ship-it, forget-it ...

    Hack-it, ship-it, forget-it … is a race to the bottom where cost is the only thing that matters. The initial delivery is what your customer gets – forever. These types of products only depreciate. And cannot be maintained. Alternatively, the value of your product can increase ov…

  • 2024-08-16

    🏆 What is the #1 purpose of YOUR Platform?

    The purpose of YOUR Platform is to reduce friction in delivering value to your customers. We are in business to deliver value to our customers. If we can do this better, we can deliver more value. There are lots of ways we can do this. Automation. Better tools. Additional feature…

  • 2024-08-15

    🌱 Culture

    What type of culture do platforms thrive in? Where ideas are valued and evaluated on merit and truth. Where initiative is rewarded. Where mistakes result in process improvements, not scoldings. Where openness and transparency are the standard. Where anyone can improve anything in…

  • 2024-08-14

    🏗️ Three levels of YOUR Platform

    We can look at platforms at three levels. Your personal platform is the know-how that you can personally reuse from task-to-task, project-to-project, and job-to-job. But, it is not real useful outside yourself. A product platform may be what a team uses to efficiently build, mai…

  • 2024-08-13

    👣 What are the first steps?

    What are the first steps to building YOUR Platform? Ironically, the first step is not some grandiose new Platform vision, but rather to set your house in order. Clean up what you already have. Fix legacy code (code without tests). Set up CI/CD. Implement end-to-end testing so tha…

  • 2024-08-12

    🔄 What is YOUR Platform? (v2)

    Had a nice visit with Rod and he asked me to describe what a Platform is in 20 words or less, so here we go: YOUR Platform is the collection of technology, tools, and processes that enable you to differentiate and consistently deliver your products and services. sorry Rod, that i…

  • 2024-08-08

    ❓ But what if ...

    In the last post, we discussed the fallacy of using complex technology when the scale does not justify it. But, what if we get a lot more customers, or sell a lot more systems? Should we not plan for the future now? Use technologies now that will work at large scale? We don’t wan…

  • 2024-08-07

    🔍 You are not Google

    A blog article published 2017 titled You Are Not Google is a good read. This article makes the case that most companies are not operating at the size of Google, Amazon, and LinkedIn. Thus, most of us are solving different problems than the big 5 tech companies. YOUR Platform need…

  • 2024-08-06

    💰 Owning YOUR platform is not more expensive

    Owning your platform sounds expensive. “We can’t afford ops people to manage servers.” “Security is scary.” “We don’t want to manage a database.” However, at the scale of most industrial products, none of these things are very hard. A couple servers can easily handle all your tra…

  • 2024-08-05

    ⚖️ False vs Real Platform Development

    A common objection to investing in a platform is that it is “too expensive.” “We want to get it right, lock it down, and then crank out our product and make some $$$.” Many managers and owners are wary of platform development because they have experienced false platform developme…

  • 2024-08-02

    🎆 Do something different

    If you only build on other people’s platforms, how are you different? And if you are not different, what value are you providing? We are not talking different for the sake of being different – outlandish, rebel, etc. We are talking being different in the sense of offering somethi…

  • 2024-08-01

    🐜 The smaller you are, the more import YOUR Platform is

    This may seem like a contadiction – how can small companies afford to own and control their Platform? Should not this all be outsourced? “Platforms is what large companies do.” Actually, the reverse is true. Netflix can afford to build on AWS and be locked into the AWS platform b…

  • 2024-07-31

    😨 Control is a scary thing

    Control is a scary thing – because then we are responsible. And if we are responsible, then we can’t blame someone else. But if we are not responsible for anything, then what are we doing? How are we adding value? Why would anyone want what we are doing?

  • 2024-07-30

    🎛️ What is control?

    What is control in the context of Your Platform? Control is simply the ability to respond to opportunities and problems. In modern systems we are very dependent on others as there is no way we can do everything ourselves. But we can also strategically retain enough control so tha…

  • 2024-07-29

    🎯 Why do we need some level of control?

    In today’s connected systems, some level of control of your Platform is needed. Security problems needed fixed. Problems needed debugged. Problematic subsystems need swapped out. Suppliers go out of business. Parts go obsolete. New customers require new features. We may want to l…

  • 2024-07-26

    🏁 The long game

    Platforms are long games. If you are building a one-off consumer product that will not be maintained, improved, or ever change, then you probably don’t need a platform. However, if you are building an long-lived industrial product that will be maintained, or a series of related p…

  • 2024-07-25

    ♾️ It's about not starting over every time

    Platforms are about reuse. Not starting over on every new product. Leveraging what you have done before is one way to scale your efforts. Reuse takes practice and experience to get it right. Effective platforms are an art.

  • 2024-07-24

    🌐 Complex Systems, Simple Platforms

    The word “simple” in the context of modern systems may seem like an oxymoron. We can’t deny that modern systems are complex – they need to be to do the things they do. The role of a Platform is to reign in this complexity and create a way to effectively manage and interact with t…

  • 2024-07-22

    🔹 Simplicity

    What is the role of simplicity in your platform? Simplicity makes it easier for people to use your platform. Simplicity helps ensure maintainability. Simplicity moves us toward reliable and secure platforms. Simple is not easy, actually it’s much harder than complex. But platform…

  • 2024-07-18

    🏢 What is your Platform?

    What is a Platform? There are many ways to look at this. Some might think of AWS, GCP, iOS, Android, etc. These are certainly platforms, but they are not your platform. Your platform is the collection of technology, tools, and processes you use to do what you do. This may be buil…

  • 2024-07-17

    ✨ The Beauty of Constraints

    Constraints are what guide us to good solutions. Software that is simple enough that average developers can actually understand it. A user interface that is intuitive. A system we can deploy without a dedicated SRE team. Hardware created with open tools that anyone in our organiz…

  • 2024-07-16

    😱 The tragedy of no constraints

    We never have enough time, resources, funding, CPU, storage, etc. However, think what would happen if we had infinite resources. We would never get started because we have forever to do it. With unlimitted resources, we tend to make a mess and get sloppy. Getting everything we wa…

  • 2024-07-15

    👋 Introduction

    Product development is hard. Technical debt tends to accrue at a frightening pace. A “Platform” approach helps you reign in the chaos. And provides a framework to reuse, scale, and leverage your efforts. This newsletter provides tips to help you in the journey to “Own your Platfo…

  • 2024-03-05

    The Ability to Improve

    (while this article contains many general ideas, it is written from the perspective of product development.) If you don’t continually improve, you soon lose the ability to do so … This thought came after an associate described a company that is struggling to manufacture one of th…

  • 2024-03-01

    Think Horses, not Zebras (Part 2)

    There is a popular quote in medical circles: When you hear hoofbeats, think of horses, not zebras. — Dr. Theodore Woodward I recently posted several debugging experiences where it was beneficial to examine simple scenarios before complex ones. Below are a few more … NVMe slot n…

  • 2023-12-01

    Why Open Source for Product Development

    (this topic is also discussed in a podcast episode) One of the paradoxes in product development is Open Source. How can you personally or as a company benefit from participating in Open Source projects? Why should you share your great ideas and code? How can you build a business …

  • 2023-09-22

    Think Horses, not Zebras

    There is a popular quote in medical circles: When you hear hoofbeats, think of horses, not zebras. – Dr. Theodore Woodward “Zebra” is the American medical slang for arriving at a surprising, often exotic, medical diagnosis when a more commonplace explanation is more likely.1 Wh…

  • 2023-01-03

    The Technology Trajectory

    See also a podcast episode where we discuss this topic. Modern systems require the integration of technology, often from many sources. This can come in the form of processors, integrated circuits, operating systems, open-source software components, databases, messaging systems, c…

  • 2022-12-09

    Go for IIoT Systems

    As developers, we have many options for programming languages. On one hand, it is great to have choices. On the other hand, it can be a little overwhelming. Many times in life, we need to make decisions before we have the experience to know the best answer. There are many opinion…

  • 2022-06-14

    Layered, Event, and Data-Centric Architectures in Distributed IoT Systems

    With the advent of the browser, cloud, embedded Linux systems, and networked microcontrollers, distributed systems are everywhere. There are many models for communication in distributed systems – we will look at the tradeoffs between three of them. There are many perspectives to …

  • 2022-03-21

    Business Contracts

    Business contracts are often executed when two companies work together. At the most basic level, a contract should describe a common understanding between the two parties. The contract should assist and aid the relationship. However, many contracts are written by lawyers with the…

  • 2020-11-27

    Technology

    The fire of information technology – will you use it: to create or consume? to comfort or torment? for education or entertainment? as a tool or weapon? to temper or incite? for community or faction? for harmony or rebellion? to encourage or discourage? to spread light or darknes…

  • 2020-01-29

    Adventures with a ATSAMA5D27 board

    Recently, we brought up a new PCB (printed circuit board) a customer had designed based on the Microchip ATSAMA5D27C-D1G processor. We encountered several interesting challenges. The first issue was that the design only had serial ports (and possibly a USB Host port that could b…

  • 2019-11-26

    Drone for Continuous Integration

    Recently, we have been evaluating Continuous Integration (CI) systems for a variety of projects (both OSS and customer). There are many OSS options to chose from. Because we already use Docker containers for Yocto/OE builds, Concourse and Drone made the short list. Both communiti…

  • 2019-11-12

    Reflections on KiCad and EDA Tools

    A recent interview with a KiCad developer prompted some reflection on KiCad and EDA (electronic design automation) tools in general. Below are samples of several PCB (printed circuit board) designs, created with KiCAD, and implemented as part of the SimpleIoT project in the last …

  • 2019-10-31

    The Humble Programmer

    In 1972, Edsger W. Dijkstra published a paper titled The Humble Programmer. Dijkstra was trained in math and physics and was a university professor for much of his life. This paper is an interesting reflection on the history of computers and contains thoughts for the future. A fe…

  • 2019-10-10

    Why are Go applications so reliable?

    Go does a lot of things well (good performance, easy to learn, very productive, extensive stdlib, excellent tooling, etc), but after programming with Go for three years (both embedded Linux and cloud applications), stability is the characteristic that really stands out. In the p…

  • 2019-04-22

    Auto-formatting/linting Go code

    Some things in life you just have to experience to truly appreciate the value. One of these is auto-formatting/linting source code. When I started programming in Go in Vim, I naturally looked for editor support, and found the excellent vim-go project. Through this, I learned abou…

  • 2019-04-09

    Microcontroller (MCU) or Microprocessor (MPU)?

    As technology advances, there are two basic processing platforms for implementing embedded systems. The first is the Microcontroller Unit (MCU). These devices have varying amounts of integrated Flash (<= 2MB) and RAM (<= 1MB), and are designed to run bare-metal code or a re…

  • 2019-04-01

    Accepting Constraints in Build Systems

    As Embedded Systems become more complex, the complexity of the process to build the software for these systems also increases. As humans, our ability to deal with complexity is limited, so we develop tools and processes to manage the complexity. In the end, these tools and proces…

  • 2019-03-13

    SD Card Write Speed Tests

    During Embedded Linux development, we often need to write large operating system images to SD cards for testing. Recently, I purchased a USB 3.0 SD card reader from Plugable. Before that, I used a USB 2.0 SD card reader from IOGear. How much better does a USB 3.0 card reader per…

  • 2018-10-04

    Getting started with Embedded Linux

    Recently I was asked by a developer, who has done windows development for 10 years, how to get started with Embedded Linux. Embedded Linux covers a lot of ground and includes a broad range of components/skills to put together an entire system. Below are a few suggestions. Do I ha…

  • 2018-02-14

    Git, Versioning, and Branching for Embedded Linux Development

    When building a product using Linux, versioning and branching of your software is an important consideration. Everyone’s needs are different depending on the size of the team, culture, and testing requirements, so there is no one size that fits all. However, after working on a nu…

  • 2017-11-16

    Separation of Source and Build Directories

    As we work with larger and more complex systems (i.e. Linux), more and more of our time is spent on integration and pulling different pieces together.  We often need to debug or understand code we did not write – especially in build systems.  To work effectively in this scenario …

  • 2017-11-06

    Understanding the NXP i.MX6UL Pin Mux (Part 2)

    In the previous post, it was noted that bit 30 needs to be set in the i.MX6UL pad config if you want to read the state of a GPIO output. Digging into this a bit more, we find the following text in the Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt file: SION(1 <…

  • 2017-09-14

    Understanding the NXP i.MX6UL Pin Mux

    (note, the article is also applicable to the i.MX6ULL as these processors are very similar) The NXP i.MX6UL application processor has a very flexible pin multiplexer, that is somewhat difficult to understand at first glance.  Most times when we’re configuring the pin mux in Linux…

  • 2016-08-18

    Why Git?

    Some time back, I gave a presentation that included an overview of the Git version control system.  I still occasionally get asked why Git should be used instead of Subversion, as it seems harder at first.  Most developers don’t really understand Git until they have used it for a…

  • 2016-06-28

    Using Go in place of a Spreadsheet

    Recently I needed to calculate NAND partition tables for a project where we will be supporting a number of different flash parts from 500MB to 2GB.  I first tried this in a spreadsheet, but found it difficult to work easily with hex numbers and do the calculations I needed.  I th…

  • 2016-04-21

    Using Docker for OE/Yocto builds

    Why Docker?  When using OE to build software for products, we often run into the scenario where software needs to be built using the same version of OpenEmbedded over the course of several years.  Production builds need to be predictable.  We’ve also observed that old versions of…

  • 2016-04-15

    Setting up a Go development environment

    Go has a pretty neat development environment, and its helpful to set up a standard GOPATH on your workstation up front.  This is what I do: mkdir ~/go add the following to .bashrc (or some file that configures your env on login) export GOPATH=~/go export PATH=$GOPATH/bin:$PA…

  • 2016-03-08

    Go Language for Embedded ARM Linux Systems

    In the quest for technologies that work well for embedded Linux systems, I recently gave Go another try.  The last timeI tried this was very early on and there were some floating point issues on ARM that appear to be fixed now.  Having spent a few days porting an existing applica…

  • 2015-12-11

    IOT Protocols: MQTT vs CoAP vs HTTP

    With the explosion of IOT (Internet of things), there are now more technologies we can use to build systems.  In reality, we’ve been doing IOT for years.  We’ve been networking devices for a long time.  We’ve been collecting data from remote nodes.  This is nothing new, but what …

  • 2015-11-18

    OpenEmbedded / Yocto Usage Survey

    Recently, I sent a survey to the OpenEmbedded and Yocto mail lists asking a series of questions about how they use OE.  38 people responded.  The average number of years using OE is 4.8 years. Below are the results of the questions.  (update 2015-11-23 – the below numbers are abs…

  • 2015-11-11

    Rebasing a set of changes with Git

    One of the common things we do during Linux kernel development is move a series of patches from one kernel version to a similar version (say Linux 4.1 to 4.1.12).  This is required as new stable versions of particular kernel version are released.  One approach is to merge, but th…

  • 2015-09-30

    Modifying the BusyBox config in OpenEmbedded

    Recently, I needed to enable the eject command in BusyBox for an OpenEmbedded (Yocto) based project.  Below is a way to do this in a fairly painless way: bitbake -c menuconfig busybox (enable the eject command in the config and save) bitbake -c diffconfig busybox (this generates…

  • 2015-03-10

    Best practices for using CMake in OpenEmbedded/Yocto

    I’ve already written about using autotools and qmake in OE.  With recent projects, we’re using CMake to build most C/C++ components.  Like any good tool, CMake has a learning curve, but it seems to do its job quite well.  Below are examples of a CMake build file, and correspondin…

  • 2014-08-25

    PCB Schematics Style Guide

    As I work at the intersection of hardware and software, I spend a fair amount of time reading schematics for printed circuit boards (PCBs).  I’m astounded at how sloppy most schematics are, and have come up with a few suggestions to consider. Schematics are not only design entry…

  • 2013-12-18

    Library sizes for C vs C++ in an embedded Linux system

    Is the size of the libraries required for C++ (vs C) a concern in Embedded Linux systems?  Most Embedded Linux systems likely include some C++ code, so this is probably not even a decision we need to make in many cases.  However, often there is a need for a small initramfs that i…

  • 2013-12-11

    Setting up an OpenEmbedded Package Feed Server

    With the BEC OE build template, you can easily set up an opkg feed server that serves up packages from your build directory.  This allows you to easily install new packages during development, without generating and reflashing an entire image.  To use: On workstation: edit local…

  • 2013-12-11

    Why systemd in Embedded Linux Systems?

    Recently I was asked why use systemd vs sysvinit in embedded systems?  There are many discussions on this, and really most of the reasons people use it for servers and desktops are also valid for embedded systems.  Lennart Poettering’s articles explain very well why you might wan…

  • 2013-06-28

    OpenEmbedded Build Template

    How does one set an OpenEmbedded/Yocto/Poky/Angstrom build? There are many options. Some include: Angstrom setup scripts Poky Freescale Community BSP OpenEmbedded core standalone (I’m sure there are many others, feel free to add in comments …) Over the past years, we’ve support…

  • 2013-05-08

    OS Containers for Build Systems

    Since I’ve been running archlinux on some of my systems, one thing I’ve found useful is systemd-nspawn. systemd-nspawn containers (or chroots on non-systemd systems) give you a quick way to install a Linux distribution, that can run inside an existing Linux system. Some cases whe…

  • 2013-04-22

    Git submodules can now track branches

    As of version 1.8.2, Git submodules can now track branches instead of specific commits.  This is good news as in many cases, this is exactly the behavior we want.  However, Git submodules are still not as flexible as Google repo, but since submodules are built into Git, the submo…

  • 2013-01-22

    A quick way to share files from any directory

    Did you ever need a quick way to share files from a directory on your computer?  Or perhaps transfer a large file to another person?  With nodejs and express, you can easily set up a temporary web server that allows users to browse and access a list of files in a directory.  For …

  • 2013-01-07

    OpenEmbedded Source Mirrors

    When using OpenEmbedded for product development, there are several reasons you may want to consider setting up a source mirror for your OpenEmbedded build: over time, sources disappear from download locations various servers for source packages may be off-line at the time a buil…

  • 2012-12-19

    Perisistent device names for USB serial ports

    Currently, my workstation has two 8-port USB<->RS232 devices, one dual port USB<->RS422/RS485 adapter, and several single port adapters such as the very useful BUBII.  So with around 20 USB->serial devices, figuring out which /dev/ttyUSBx entry corresponds to which…

  • 2012-12-08

    A quick way to set up an OpenEmbedded feed server

    During development with OpenEmbedded (oe-core, meta-oe, meta-angstrom), I often find it useful to set up a feed server so that packages can quickly be installed on the target system without manually copying them over or building a new image.  One way to do this is copy your deplo…

  • 2012-12-05

    Setting the root password in an OpenEmbedded image

    During development, often a blank root password is used for the embedded Linux target system.  However, when deploying an embedded Linux system, often there is a requirement to set the root password to something non-obvious.  One way to do this is boot the system, and change the …

  • 2012-12-05

    OpenEmbedded: configuring openssh to allow a blank password

    Noticed the following when browsing around in the OpenEmbedded sources the other day: ROOTFS_POSTPROCESS_COMMAND += "openssh_allow_empty_password ;" This allows a blank password for development, which is conveient for running ssh/scp commands to the device.  The above …

  • 2012-08-29

    Running a reboot cycle test shell script with systemd

    One of the easiest ways to stress test an embedded Linux system is to continuously reboot the system. Booting is a difficult activity for a Linux system (similar to waking up in the morning). The CPU is maxed out. There are a lot of things happening in parallel. Software is initi…

  • 2012-08-29

    Bitbake has a new way of displaying build status

    Now instead of displaying a scrolling log, bitbake will display a simple output that lists which tasks it is working on at the moment: Currently 4 running tasks (185 of 3093): 0: gmp-native-5.0.5-r0 do_configure (pid 22919) 1: lzo-native-2.06-r1 do_configure (pid 27103) 2: expa…

  • 2012-08-16

    Mounting a UBIFS partition using systemd

    Systemd is becoming the defacto system and service manager for Linux, replacing the SysV init scripts.  The Angstrom distribution has supported systemd for some time now. Recently, I needed to mount a UBIFS filesystem in one of my projects.  The main application is being started …

  • 2012-08-07

    A Review of Graphical Application Solutions for Embedded Linux Systems

    One of the decisions we face when building Embedded Linux systems is what components to use. With Open Source software, there is often more than one good option. Graphical libraries are no exception. In this article, we’ll examine GTK+, Qt, EFL, Android, and HTML/Javascript. Ther…

  • 2012-01-31

    A Linux Kernel Tracing Tutorial

    The Linux kernel has a fairly extensive tracing infrastructure that is quite useful for debugging.  There are a number of things you can do with tracing, but the focus of this article will be the traditional printk type debugging we often end up doing to trace initialization issu…

  • 2012-01-26

    The easy way to get serial terminal in Linux

    When doing embedded Linux development, most of us spend out time tethered to a target system with a serial cable, which is used for a serial console.  Minicom is the defacto serial terminal software for Linux.  However, Minicom is a little fussy in that you typically have to set …

  • 2011-03-31

    Verizon UML290 and Sprint U600 USB Modems in Embedded Systems

    Recently I tested support for the Verizon UML290 and Sprint U600 USB Cellular modems in an embedded Linux system.  Both modems support 3G and 4G networks, but only the 3G modes were tested due to lack of 4G coverage at the testing location. Fortunately, both modems function very…

  • 2011-03-29

    Git and Distributed Development

    This is part of an ongoing series of articles on the Git version control system. The “many repository” paradigm has been partly driven by the distributed development paradigm.  Git solves the problem of multiple developers working in multiple repositories very well.  Because we…

  • 2011-03-19

    How do modern USB chargers work

    As we help customers design products, we often try to leverage the latest cell phone practices and technologies.  One of these is USB charging.  There has been a push in recent years to standardize on USB chargers for cell-phones.  There are a number of organizations involved inc…

  • 2011-03-17

    Git Overview Screencast

    This screencast (use Firefox to view the screencast) provides an overview of the Git version control system.  There are 3 features of Git that are especially interesting: many repositories (vs. one large repository) distributed development cheap branches The fundamental drive…

  • 2011-03-17

    Git and Why Multiple Repositories

    This is part of an ongoing series of articles on the Git version control system. This article discusses the trend in software configuration management toward multiple repositories, rather than one large repository.  In the past when many companies used Subversion or comparable sy…

  • 2010-12-16

    C++ callbacks to member functions

    How to properly do callbacks to C++ member functions is something that has intrigued me for some time now.  There are a number of solutions, none of which I really liked.  But now with the std::tr1::function and std::tr1::bind functions, there appears to be a clean solution. In t…

  • 2010-12-10

    Yocto and OpenEmbedded

    Recently, I attended an Embedded Linux summit hosted by the Linux Foundation to discuss the Yocto project. Overall, I thought the meeting was very positive and constructive. Having met and discussed at length the methods and goals of the Linux Foundation with some of their peopl…

  • 2010-11-05

    Qt Developer needed

    We are currently in need of a Qt developer to help on a project.  If you are interested, please contact us.  Thanks.

  • 2010-10-11

    OpenEmbedded srctree and gitver

    Recently an OpenEmbedded class name srctree became usable.  The srctree.bbclass enables operation inside of an existing source tree for a project, rather than using the fetch/unpack/patch idiom.  The srctree.bbclass in combination with the OpenEmbedded gitver.bbclass and git subm…

  • 2010-08-07

    Qt Creator for C/C++ development

    Recently, I’ve been evaluating Qt Creator for general C/C++ development.  I’m currently involved in the development of a rather large C++ application that is approaching 200,000 lines of code and 1000 source modules.  In the past, I’ve typically used Vim for editing, and Eclipse …

  • 2010-07-26

    Embedded Linux Presentation in Cleveland

    Chris Cole and I will be giving a presentation in Cleveland Tues evening (2010-07-26).  Stop by if you are interested.

  • 2010-06-17

    Git submodules: what to do when you commit to (no branch)

    When using git submodules, eventually you’ll run into a situation where a workspace has checked out a submodule as (no branch), and you unknownly make modifications and commits to (no branch).  Now what?  It turns out Git has a very useful feature named reflog.  Reflog keeps a lo…

  • 2010-06-14

    Installing OMAP3 images on a SD card

    This article and screen-cast is a continuation of that last couple posts describing the BEC OE build template.  The purpose again for a build system is to automate tedious manual tasks, and in doing so, we end up documenting how the build system works.  Having a good build system…

  • 2010-06-08

    OpenEmbedded Build Template posted

    A password protected version of this article accidently got pushed into the feed before it was finished, so this post is simply to indicate the following article is now available.  Sorry for the confusion. /637/oe-build-template/

  • 2010-06-08

    Creating a Custom OpenEmbedded Image

    In this article screencast, we’ll demonstrate how to create a custom Linux OS image using the OpenEmbedded build system.  This demonstration builds on the earlier article about using the BEC OE build template.  The OpenEmbedded build system is similar to Linux distributions in th…

  • 2010-06-05

    OpenEmbedded Build Template

    Setting up an OpenEmbedded build is a fairly simple process if you carefully follow the instructions.  There are also a number of scripts available that automate the setup such as the OpenEmbedded Tools for Eclipse, the Angstrom setup scripts, the KaeilOS Openembedded Manager, an…

  • 2010-06-02

    MeeGo Review

    As we evaluate various technologies that might be applicable in embedded systems, MeeGo is the subject of this article.  MeeGo is a collaboration between Intel and Nokia, and is replacing the Moblin and Maemo efforts.  For this review, MeeGo was installed to a USB flash disk and …

  • 2010-02-08

    Gumstix Overo review

    Based on the interest and number of embedded modules currently available, it appears that the OMAP3 CPU from TI will be very popular in the general purpose embedded Linux market.  One of the OMAP3 modules available is the Overo from Gumstix.  As the company name suggests, this mo…

  • 2010-01-06

    The Go language for embedded systems

    As one of the things I do is evaluate new technologies for embedded systems, the Go language from Google is an interesting development.  I have been looking for a better “system” language for some time.  What I mean by a better system language is one that is nearly as efficient a…

  • 2009-12-29

    OpenEmbedded development activity

    Ever since I have been sending out weekly change logs, I have been impressed by the consistent amount of development activity in the OpenEmbedded project.  Every week there are consistently over a dozen developers making changes.  Developers come and go, but the contribution leve…

  • 2009-12-07

    OMAP3 Resume Timing

    One of the most common power management modes for ARM processors is the suspend mode.  In this mode, peripherals are shut down when possible, the SDRAM is put into self-refresh, and the CPU is placed in a low power mode.  A useful bit of information is to know how soon the system…

  • 2009-12-01

    Linux kernel stats, and long term advantages

    I just read an interesting interview with Greg Kroah Hartman.  According to Greg, we add 11,000 lines, remove 5500 lines, and modify 2200 lines every single day.  This rate of change is something that few organizations have the resources to match.  It is interesting that Google c…

  • 2009-11-23

    Linux PM: OMAP3 Suspend Support

    This article provides an overview of the Linux kernel support for the suspend state in the TI OMAP3.  Power management has always been one of the more difficult parts of a system to get right.  The OMAP3 power management is quite extensive.  There are many levels of very granular…

  • 2009-11-19

    Integrated CAN solutions for Linux

    I just received an email notification from EMS (http://ems-wuensche.com/) that support for their CAN controllers is now in mainline Linux kernels.  The EMS PCI products are supported in 2.6.31, and the CPC-USB product will be supported in 2.6.32.  I’ve used various Linux CAN stac…

  • 2009-11-05

    Notification at the end of builds

    I do quite a few OpenEmbedded project builds during the course of a week.  This process usually takes 3-5 minutes.  That is just enough time to get distracted doing something else and forget about the build until an hour later when you realize – oops, I was supposed to send out a…

  • 2009-10-21

    A quick serial logging application

    Recently when debugging a device connected to a rs485 bus, I needed a simple application to dump the raw data coming over the rs485 bus.  Minicom does all kinds of weird terminal stuff, plus it will not display binary data, so that was out.  While looking for serial analyzer prog…

  • 2009-10-16

    Apache and how to correctly use NameVirtualHost

    As I often get involved in server administration (SVN, git, redmine, etc setup), I deal with Apache on a regular basis.  For simple configurations, the default Ubuntu/debian config works well.  However, for a more complex setup with virtual hosts, multiple IP addresses, and SSL s…

  • 2009-10-13

    Best practices for kernel development with OpenEmbedded

    A common question is how do you do kernel development with OpenEmbedded?  Typically, OpenEmbedded builds a kernel by checking the source out of a git repository, or by applying patch files to a released version of the kernel.  See the many recipes for examples.  This works very w…

  • 2009-09-09

    converting digital camera movies to ogg format

    Now that firefox (v3.5) has built in support for ogg videos, ogg is now the most convenient format for “easy to view” video files (assuming you don’t want to use a service like youtube).  Some digital cameras (like my Canon) records movies in AVI format.  I created a script that …

  • 2009-09-08

    Best practices for building Gtk+ applications with OpenEmbedded

    I recentlywrote an article about best practices building Qt applications with OpenEmbedded, and it occured to me that I should write an equivalent article for Gtk+ applications.  The same points apply – put your application source in a SCM system, and put the install logic in the…

  • 2009-08-06

    Best practices for building Qt applications with OpenEmbedded

    This article describes how to cross compile a Qt application (named qt_tutorial) with OpenEmbedded, and several best practices you should consider.  OpenEmbedded currently includes fairly good support for building Qt – both Qt Embedded and Qt X11.   OE also includes a number of q…

  • 2009-07-30

    Gumstix Overo Pinout Spreadsheet updated

    The Gumstix Overo Pinout Spreadsheet has been updated with the Palo board connector pinouts, and a few mistakes have been fixed.

  • 2009-07-14

    How to capture source changes to an OpenEmbedded package

    One task that is a often confusing to new OpenEmbedded users is how to capture changes to the source code for a package/recipe.  First, lets review the progression in tools use to capture source code changes. Figure 1: Progression of tools In days of yore, developers often used g…

  • 2009-06-20

    Embedded Linux versus Windows CE

    Occasionally I am asked how Embedded Linux compares with Windows CE.  I have spent the past 5 years doing mostly embedded Linux development, and the previous 5 years doing mostly WinCE development with a few exceptions, so my thoughts are no doubt a little biased toward what I un…

  • 2009-05-26

    Dealing with large data structures efficiently in embedded systems

    I’m currently dealing with a programming problem where I need access to several 64MB, file-backed data structures concurrently on an Embedded Linux system that only has 64MB of RAM.  The data structures are fairly sparse (mostly zero data), and I typically only need to access sma…

  • 2009-05-13

    MontaVista Linux 6 is based on OpenEmbedded Technologies

    Very interesting news from MontaVista yesterday as they announced MontaVista Linux 6.  It turns out they are using bitbake, which is the core of the OpenEmbedded build system.  Along with the adoption of OpenEmbedded in many leading Embedded Linux efforts (Beagleboard, Gumstix, B…

  • 2009-05-11

    How to set up a NFS root filesystem for embedded Linux development

    Although ssh and friends work really well for embedded systems, occasionally you want to set up a NFS root for development.  One of the scenarios where nfsroot is useful is if you are making a lot of rootfs changes, and you don’t want to spend the time to reprogram the flash on t…

  • 2009-04-24

    Compulab cm-x270 kernel updated to 2.6.29 in OE

    The cm-x270 kernel support in OpenEmbedded has just been updated to version 2.6.29.

  • 2009-03-19

    Wi2Wi W2CBW003 Wifi/Bluetooth module review

    The Wi2Wi W2CBW003 is a highly integrated module that provides both Wifi and Bluetooth radios for embedded designs. This module is ideal for embedded designs, as it provides a lot of functionality in a small package and includes standard interfaces like SPI, SDIO and serial that…

  • 2009-03-04

    Memory Performance on various Embedded Systems

    Marcin just published an interesting article about memory performance on various embedded systems using the hdparm -T as a simple benchmarq.  This test gives a pretty good indicator of memory performance in the system.  From the hdparm man page: Perform timings of cache reads for…

  • 2009-02-20

    Who is using OpenEmbedded?

    Having used OpenEmbedded for a number of Embedded Linux projects over the past 5 years, it is interesting watching new users come on board.  The most recent announcement came from Koan that the KaeilOS distribution will be joining the OpenEmbedded project.  In the announcement, t…

  • 2009-02-07

    Sprint 598U USB Broadband Modem in Embedded Systems

    One thing that works really well in Linux is support for USB Broadband modems. While it usually takes a little fiddling with PPP scripts, it is generally not too difficult to get working. One of the reasons for this is most modems implement a USB serial interface, and then the …

  • 2009-01-28

    Socketcan utils and test apps added to OpenEmbedded

    The Socketcan test applications and utilities are now available in OpenEmbedded.  The socketcan kernel modules already exist in OE.  To build and deploy: get the latest version of OE metadata bitbake socketcan-utils-test scp /build/angstrom-2008.1/tmp/deploy/glibc/ipk//socketcan…

  • 2009-01-26

    Socketcan CAN-bus drivers added to OpenEmbedded

    I just added a recipe to OpenEmbedded to build the Socketcan kernel modules from the socketcan SVN.  So if you are using the latest OpenEmbedded metadata, you can: bitbake socketcan-modules scp /build/angstrom-2008.1/tmp/deploy/glibc/ipk//socketcan-modules_0.0+svnr917-r0_cm-x270…

  • 2009-01-22

    Intel Atom vs TI OMAP3

    As we look at new projects, both the Intel Atom and the TI OMAP3 processors generate considerable interest.  As we have already shown, the OMAP3 does offer a considerable performance improvement over earlier generations of ARM CPUs.  The following video I found on YouTube shows a…

  • 2009-01-21

    GTK performance on PXA270 vs. OMAP3

    Several of my customers have built applications using the GTK+ tookit.  While GTK+ works fairly well for what we have done, I have been wondering how the performance compares on the new Omap3 processors from TI. As we are evaluating the OMAP3 for several projects, I did a simple …

  • 2009-01-17

    Fix for PXA270 MMC/SD Controller Write Corruption

    During system verification for a customer, we noticed occasional failures when writing to a SD card using the Marvell PXA270 MMC/SD controller.  The failure is a 4KB block of data is shifted on byte, where the first byte is duplicated and the last byte is dropped. The test app th…

  • 2009-01-15

    Installing Ubuntu on a Core i7 DX58SO motherboard

    UPDATE:  2009-03-17 – It appears that hard drive issues I encountered are likely due to the HW RAID formatting on the drive I tried.  I just tried a brand new hard drive, and Ubuntu 8.10 installed flawlessly, and everything works. I’m not sure why computer upgrades are always suc…

  • 2009-01-13

    Switching to Wordpress

    After using Joomla for several years, I’m switching my web site to wordpress.  As I mostly use my site for writing technical articles, it makes sense to use something that works very well for just that.  So far, I’m finding Wordpress very polished, and it has all the functionalit…

  • 2009-01-10

    Mono 2.2 RC1 added to Openembedded

    I recently addedMono 2.2 RC1 to OpenEmbedded.  The last usable version of Mono in Openembedded was 1.2.6, so this is a big step up.  Lots of interesting things have been happening since then (like Full Static Compilation) that continue to make Mono interesting for embedded.  Ther…

  • 2009-01-10

    Using the Vala Programming Language in Embedded Systems

    Recently I’ve been following the Vala programming language and using it some in embedded systems.  Vala is a new programming language that aims to bring modern programming features to GNOME developers without imposing additional runtime requirements and without using a different …

  • 2009-01-10

    How to implement an interrupt driven GPIO input in Linux

    With Linux, some of the things that seem like they should be easy are not – at least at first glance.  For example, how do you read an interrupt driven GPIO input in a Linux application?  With simpler microcontroller systems, this is straightforward, but with a system like Linux,…

  • 2009-01-09

    Tips for reading a serial data stream in Python

    Interfacing with a RS232 serial device is a common task when using Python in embedded applications.  The easiest way to get python talking to serial ports is use the pyserial project found at  http://pyserial.sourceforge.net/.  This module works on most platforms and is straightf…

  • 2009-01-09

    How to Optimize Python reads for general data

    The Python file object read() function acts a little differently than the standard read() found in C.  This article describes some of these differences and how to optimize reads for general continuous data streams such as reading data from a collection device through a pipe. Pyth…

  • 2009-01-09

    Implementing Asterisk

    Over the past month, we have been working on implementing Asterisk in our office.  Asterisk (http://www.asterisk.org/ ) is a complete software PBX (Private Branch Exchange) that runs on top of Linux.  Asterisk supports a number of features commonly found in a PBX including voicem…

  • 2009-01-09

    How to Implement a Web Application Framework in an Embedded Linux System

    As devices are increasingly more networked, an embedded web server is becoming a standard way for users to interact with and configure an embedded device using a standard web browser. As an example, most pieces of networking equipment (such as routers and wireless access points)…

  • 2009-01-09

    Do you have an Exit Strategy?

    Some time ago, eWeek published in interesting article by Scott McNealy named “Technology’s Barriers to Exit”.  In this article, Scott makes an interesting point about considering the cost of technology.  There are three costs to consider: cost of acquisition ongoing cost cost to…

  • 2008-12-15

    Gumstix Overo Connector Spreadsheet

    One of the first things I do when designing a system based on a processor module is create a spreadsheet listing all the connector I/O.  This is the easiest way I’ve found to make sure nothing gets missed.  My first pass at a I/O spreadsheet for the Gumstix Overo is available at:…

  • 2008-12-12

    How to disable SSH host key checking

    This article presents a very nice overview of options to disable ssh host key checking.  When working with embedded systems where you are constantly reloading the rootfs, it is really annoying to have to edit your ~/.ssh/known_hostsevery time you update the rootfs on the target d…

  • 2008-12-02

    Printing from Embedded Systems

    How does one implement support for printing in embedded systems? I recently had the opportunity to add printing support to an embedded Linux system.  The device is an industrial touch screen powered by a Compulab cm-x270 module (PXA270 CPU), and runs a GTK+ application.  The cust…

  • 2008-11-19

    Things that work!

    Running a small business has a special set of challenges, and if you are not careful, the overhead can quickly consume you.  This article is a list of things that I use in my business that work well for me, and help me to be efficient when there is so much to do … Entire article …

  • 2008-10-22

    Benefits of OpenEmbedded switching to Git

    Recently the OpenEmbedded project has switched to the Git version control system.  This is good news for many reasons.  The obvious reasons are Git is faster than Monotone, handles branching better, has lots of nice features, larger user base, etc.  Monotone has served us well, b…

  • 2008-08-26

    more fun with git branches

    One thing you learn after using git for awhile is you get used to trying random things, and it will often just work.  For example, if I want to know the differences between Linus’s kernel tree, and the Wolfson dev branch for a particular directory: cbrake@happy:/build/linux-2.6$ …

  • 2008-08-22

    Linux Input Testing and Debugging

    The Linux input layer has made a lot of progress in recent years.  When writing a new input driver (such as keyboard, trackball, etc), it is useful to be able to monitor input events using a test application.  This article describes two ways to accomplish this using kernel input …

  • 2008-06-02

    Using a Verizon USB720 modem in an Embedded Linux system

    The Verizon USB720 Cellular modem is a quick and easy way to add wireless internet connectivity to your embedded system.  Why might you want to add cellular  connectivity to your embedded device?  Remote access and diagnostics is a big reason.  One customer I have is planning to …

  • 2008-05-03

    Autotools quick reference

    At some point, most Linux developers need to master Autotools.  For most of us, this is a fairly painful process, but like any good tool, Autotools is extremely useful and well worth learning.  For example, if your program is set up correctly using Autotools, it will cross compil…

  • 2008-04-02

    The Linux kernel container_of macro

    The Linux kernel contains a very useful macro named “container_of” that is used extensively in back-casting a data structure to its containing data structure.  This article includes a simple program that illustrates how this macro is used, and explains why it is so useful. If you…

  • 2008-03-19

    Should you be using monotonic timers?

    In a previous article, I covered some of the basics of Linux timers.  Any time you are doing any type of fixed time delay in a program, you should really be using monotonic times, so the delay will not be affected by system time changes.  In an effort to save cost, some embedded …

  • 2008-02-29

    Compulab cm-x270 kernel update to 2.6.24

    The kernel support in OpenEmbedded for the Compulab cm-x270 has been updated to version 2.6.24.  The 2.6.24 kernel opens up several possibilities including better real time and high resolution timer functionality, an improved SD Card driver, and a full SDIO stack with support for…

  • 2008-02-18

    GESBC-9302E kernel update to 2.6.24, and reboot fix

    I recently updated the GESBC-9302 machine support in OpenEmbedded to include the 2.6.24 released kernel.  Also, Glomation has kindly provided me with a patch for the software reboot problem which I have integrated into the OpenEmbedded build for the GESBC.   The patch files are p…

  • 2008-01-29

    Glomation GESBC-9302E Review

    Recently, I’ve had the opportunity to work with a Glomation GESBC-9302E single board computer.  This SBC contains a Cirrus Logic EP9302 ARM processor and options for plenty of RAM and Flash memory which means you have many options for writing your applications including high leve…

  • 2008-01-09

    Marvell Embedded SDIO Wifi Success

    As detailed in the article I wrote back in September of 2007 (/web/content/view/75/9/), getting  embedded wifi modules functioning is not a simple task.  However, due to recent advances in the Linux kernel, it looks like a viable solution for low-mid volume products is emerging. …

  • 2007-12-15

    C# on embedded ARM Linux systems is now practical

    Update: Michael Dominic K. has kindly provided feedback on this article and has some additional points about Mono and embedded systems. Mono has included support for ARM systems for some time, but with the release of Mono 1.2.6, and its inclusion in OpenEmbedded, it is now practi…

  • 2007-12-14

    Mono 1.2.6 added to OpenEmbedded

    I recently updated the Mono recipes in OpenEmbedded to include the Mono 1.2.6 version.  Several critical bugs that were present in 1.2.5 have been fixed, and its looking very good.  More on this later …

  • 2007-11-30

    Embedded Linux development on Windows???

    From http://www.embedded.com/design/opensource/204300381 : Host platform Although everything I will describe can be also done on a Windows host, I recommend using Linux. It’s more convenient, and more tools and utilities are available. And if you rely on a few Windows applicatio…

  • 2007-11-07

    Compulab EM-X270 Review

    The EM-X270 is a full featured computer board from Compulab (http://www.compulab.co.il/x270em/html/x270-em-datasheet.htm) designed for handheld/mobile applications.  The board includes options for about anything you might need in a portable system including a PXA270 processor, GS…

  • 2007-10-22

    Linux 2.6.23 for the Compulab cm-x270

    Updated 2.6.23 kernel patches for the Compulab cm-x270 are now available in OpenEmbedded: http://www.openembedded.org/filebrowser/org.openembedded.dev/packages/linux/linux-2.6.23/cm-x270 The cm-x270 support in OpenEmbedded has undergone a lot of clean-up in recent weeks.  Now is …

  • 2007-10-08

    Compulab cm-x270 NAND flash eraseblock sizes

    If you are having trouble mounting a JFFS2 file system on a Compulab cm-x270 module, you may have a device that has a NAND flash with 16KiB eraseblocks.  All of the devices I have personally used to date have had 128KiB eraseblocks, but I just helped a cm-x270 user through some f…

  • 2007-10-08

    Howto load Openembedded on the Compulab cm-x270 computer module

    There are quite a few people using (or would like to use) OpenEmbedded on the Compulab cm-x270.  The cm-x270 is a high performance, low cost computer module that can be used with a custom baseboard in embedded systems (see /web/content/view/62/9/ for a review).  I get a lot of qu…

  • 2007-10-04

    Mono support in OpenEmbedded and Openmoko packages

    Original article published2007-10-04 As of today, the Mono build in OpenEmbedded is working pretty well.  Mono support for ARM and other embedded architectures should add some interesting capabilities for embedded Linux devices.  Having written a number of large embedded Linux ap…

  • 2007-09-25

    How to implement realtime periodic tasks in Linux applications

    (see also should you be using monotonic timers?) Have you ever wondered what is the best way to implement periodic tasks in Linux applications – something better than usleep()?  This article covers a number of issues related to this subject including real-time tasks, the differen…

  • 2007-09-19

    The Embedded WiFi module Quest

    original article written in Sept, 2007 How does one implement WiFi functionality in vertical, low volume portable products?  This is a good question, and one I’ve been struggling with for the past 3 months.  I have a customer who is designing a portable data acquisition system ba…

  • 2007-08-30

    The correct way to add packages to an OpenEmbedded Image

    Update 2007-10-14: use IMAGE_INSTALL in image recipe Update 2007-10-22: a few corrections, added full path for include and comments Update 2010-06-07: use recipes instead of packages directory As more and more OpenMoko developers are coming on-line, it is becoming obvious that my…

  • 2007-08-16

    Howto use a Git topic branch to maintain a patchset, and isolate problems

    The more I use Git, the more I am really impressed with some of its capabilities.  What is Git?  Git is a very advanced distributed source code control system that can do some very neat things.  For the average developer using open source software, we are mainly concerned about m…

  • 2007-08-13

    Linux 2.6.22 for the Compulab cm-x270

    I just completed porting the cm-x270 Linux kernel patches to the 2.6.22 kernel.  Kernel build is available in OpenEmbedded.  Patches are available in the OE tree: http://www.openembedded.org/filebrowser/org.openembedded.dev/packages/linux/compulab-pxa270-2.6.22 Shortly I will be …

  • 2007-07-20

    Design tips for your embedded Linux product

    When designing a system that runs embedded Linux, there are number of things you can do to make your life a lot easier and provide for future expansion to cover cases you did not anticipate.  Following these simple guidelines can drastically improve the efficiency of developing t…

  • 2007-07-10

    Open JTAG debugging tool for the PXA270

    Looking for a low cost, high functionality JTAG solution for the PXA270?  As of several weeks ago, the openocd project now works with the Intel/Marvell PXA270 processor.  There are a number of USB based JTAG debuggers available for under $100, so the cost is minimal.  This articl…

  • 2007-06-20

    How to control the cable nightmare

    Do you ever wonder if there is a better way to manage cables in your lab?  I typically have have 5-10 embedded systems on the bench powered up at any give time.  When you start thinking of all the cables required to connect these systems (every one requires at least power, serial…

  • 2007-06-09

    Atmel AT32AP7000 development board review

    I recently purchased an Atmel NGW100 development board which includes an Atmel AT32AP7000 CPU.  This CPU is based on the new Atmel AVR32 architecture, and is capable of running full Linux.  This review covers the basics of this development board, the AVR32 architecture, options f…

  • 2007-06-09

    The Embedded Industry Transformation

    I just ran across an interesting article written by Doug Gaff titled “Is the embedded industry dead?”. The article points out the transformation that is happening in the “embedded” industry. For many systems, we are no longer constrained by minimal resources (/web/content/view/…

  • 2007-05-29

    Can you afford not to use Linux in your product?

    How much does hardware capable of running Linux cost?  Recently, I priced components for a fairly minimal system. CPU: Atmel AT91SAM9260 (< $10) 32MBytes of SDRAM ($6) 256MBytes of NAND flash ($6) These are prices for relatively low volumes on the order of 1000 pieces.  So, …

  • 2007-05-12

    Is Linux ready for real-time applications?

    Have you ever wondered about the real-time response of Linux and how well it performs?  I recently developed a system where I had the requirement to send a packet of data out a serial port every 30ms.  This article describes how stock Linux can be used to accomplish this and solu…

  • 2007-02-26

    NAND Flash is almost "free" and what it means for Embedded Systems

    original article published in March, 2007 EETimes recently ran an article titled “Plummeting prices make NAND appear almost free” (http://www.eetimes.com/news/latest/showArticle.jhtml?articleID=197002923).  1GBytes parts cost around $55 in Nov 2005. As of 2007-03-28, a 1GBytes pa…

  • 2007-02-21

    Do you need "software update" functionality in your Embedded Linux system?

    In this day and age, most embedded systems include a way for users to easily update software once the device has been deployed.  This article discusses the requirements for a field update mechanism along with pointers for how to implement. Update Mechanism Requirements Requiremen…

  • 2007-02-16

    Building a tiny "safe" boot image using OpenEmbedded

    We are currently working a project that contains cm-x270 module (/web/content/view/62/9/ ) which contains 4MB of NOR flash and 128MB of NAND flash.  The Linux kernel and a small root file system (rootfs) will be stored in NOR flash, and the main rootfs in the NAND flash.  The roo…

  • 2007-01-30

    Compulab cm-x270 PXA270 module review

    We are in the process of supporting a customer who is designing a product that uses the Compulab cm-x270 “Computer-on-module”.  The cm-x270 is a small computer module 66x44x7mm that contains an Intel PXA270 ARM processor similar to those found in many PDAs or smart phones.  This …

  • 2007-01-12

    Introduction to OpenEmbedded part 1

    This is the first in a multi-part series on the OpenEmbedded development environment.  This and subsequent articles will provide an introduction to OpenEmbedded, why to use it,  how it works, and will provide examples of how BEC has used OE in various projects. Part 1 – Why do we…

  • 2006-12-19

    Remote access for embedded systems behind a firewall

    When deploying embedded systems, wouldn’t it be nice if you could easily set up remote access for troubleshooting and updates?  With Embedded Linux systems, this is quite easy to do.  This article will explore how to use SSH to set up remote access to an embedded system behind a …

  • 2006-11-29

    How to build GNU/Linux for an embedded x86 computer

    Recently, I had a customer who needed an embedded Linux distribution running on an Advantech PCM-9371 single board computer (SBC).  The PCM-9371 contains a low voltage Celeron or Pentium III processor.  This article describes why the Openembedded build system was chosen and a few…

  • 2006-10-30

    Adding software to a Moxa UC7408 using OpenEmbedded

    One of the big advantages of using Linux in embedded systems is the thousands of applications and drivers available for it (/web/content/view/35/37/ ).  One of the challenges of Embedded Linux is building these applications.  Building applications for an embedded system often inv…

  • 2006-09-29

    Moxa UC7408 Review

    I am currently evaluating a Moxa UC7408 for one of my customers.  The UC7408 is a small fanless industrial computer that runs Linux or Windows CE.  This article provides a basic overview of this unit and a review of some of the UC7408 features and the Linux distribution Moxa prov…

  • 2006-09-20

    How to evaluate VoIP providers with Asterisk

    There are many options when selecting a VoIP provider to terminate your Asterisk PBX.  One of the most important factors in this selection is the quality of the internet connection between your PBX and the VoIP provider.  The route between you and your VoIP provider is one of the…

  • 2006-08-28

    Implenting QoS for VOIP in a Linksys router

    In our quest to implement an Asterisk PBX in our office, we are evaluating several VOIP (Voice Over IP) providers.  VOIP provides several benefits over traditional phone lines including: low cost (typically around $0.02 per minute) available in pre-paid plans can support concurr…

  • 2006-06-02

    Embedded is a Service Industry

    Linuxdevices.com has recently published an article titled: Let’s call Embedded what it is – a Service Industry(http://linuxdevices.com/articles/AT6989225710.html). In this article, Curt Schacker discusses how little growth there has been in the Embedded Systems industry. He clai…

  • 2006-05-29

    TRAC and Distributed Development

    I have long been a big fan of source control tools and issue tracking systems.  The “concurrent” model made popular by CVS is a tremendous benefit any time there are multiple people working on the same project.  For most of the projects BEC participates in, we end up setting up a…

  • 2006-05-08

    Opencores SPI Controller Review

    Recently, I had the opportunity to use a SPI controller from Opencores in a customer design based on an Intel PXA255 processor and a Xilinx CPLD.  The customer did not want to change the processor or the CPLD family, but needed an extra SPI interface in the device.  I had my doub…

  • 2006-05-02

    A Really Nice Hex Calculator

    When working with embedded software, I often have a need for a hex calculator.  Over the years I’ve used a number of different tools.  Through college and for several years after, I used my HP48 calculator.  It is a great tool.  Around 1998, I discovered the Python programming la…

  • 2005-11-15

    Specialization or not

    I have often wondered about specialization.  We can often find ourselves in ruts if we specialize too much.  But on the other hand, specialization can lead efficiencies in some cases.  In my work as a consultant, I often find myself in new situations where I have to learn fast.  …

  • 2005-11-03

    Total Phase USB Protocol Analyzer review

    I recently purchased a USB protocol analyzer from Total Phase.  The device will analyze full speed USB traffic and works well with Linux.  On Linux, the software makes use of libusb, so there is very little setup required to get the device working – very nice.  At a price of $400…

  • 2005-11-03

    Economics and Finding Outsourcing Talent

    Economics In One Lesson by Henry Hazlitt presents an interesting and logical view of economics.  The book presents many ideas that seem right (like saving) and provides very logical arguments to back them up.  Even though the book was originally published in 1946, the topics cove…