Daily · Cliff Brake

Platform Thinking

"How" you build is more important than "What" you build. Short daily notes on building connected products — platform thinking, release-first, and developer experience.

  • 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). Bot…

  • 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…

  • 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 …

  • 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-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…

  • 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 li…

  • 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 manua…

  • 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 gatekee…

  • 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 gi…

  • 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 sc…

  • 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'…

  • 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 structu…

  • 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 fo…

  • 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 tex…

  • 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 distribut…

  • 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 w…

  • 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.…

  • 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…

  • 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 …

  • 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…

  • 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 probl…

  • 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…

  • 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 possi…

  • 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

    ✅ 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. The…

  • 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

    ✉️ 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 switchin…

  • 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, ver…

  • 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-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 …

  • 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 …

  • 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 differe…

  • 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-dir…

  • 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…

  • 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 a…

  • 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 igno…

  • 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 custome…

  • 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 creat…

  • 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 abov…

  • 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 concerne…

  • 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 deci…

  • 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 ge…

  • 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 somethi…

  • 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 t…

  • 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 ma…

  • 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 t…

  • 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. Get…

  • 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. …

  • 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…

  • 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. Exampl…

  • 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 brows…

  • 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 prob…

  • 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 up…

  • 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 you…

  • 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 do…

  • 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 s…

  • 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 head…

  • 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 ... Buil…

  • 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 rig…

  • 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 …

  • 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…

  • 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, automat…

  • 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 …

  • 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 …

  • 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…

  • 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 someth…

  • 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 …

  • 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 …

  • 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…