Platform Thinking

:ok_hand: 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 a headset when communicating.
  • Fixing bugs.
  • Keeping code clean.
  • Following the process.
  • Having a process.
  • Working transparently.
  • Making things easier for others.

Simple things are foundational – if you don’t get these right, the rest crumbles.

:sunrise: 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.

:chart_with_upwards_trend: 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 existing systems
  • better customer support
  • giving users more control/flexibility/customization
  • higher profit margins

Think carefully about this as scaling in one dimension often limits how far you can scale in another.

:gear: 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 mentor others. But, even this has limits. So we are left with two options:

  1. Get the right people on the bus.
  2. Work on the systems and processes that help all of us work and communicate more effectively.

:arrows_counterclockwise: 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 easy to use that when working on hard problems, I automatically create an issue to log progress. It is easier and faster than keeping notes anywhere else.
  • Gitea releases are so quick and easy to use that I use them even for internal releases there rather than composing an email.
  • Jitsi Meet is easier than a phone call, so we use it for most calls and have the benefit of screen sharing, video, multiple participants, etc.
  • Code formatting tools help me as a developer, so I gladly integrate them into my editor.
  • Part numbers are so easy to pull and use that they help me manage parts and assemblies for my prototype builds, so I pull them early in the design process and integrate them into CAD libraries.
  • Tests are easy to create and run locally, so I create them as part of my development process.
  • Documentation is integrated with the design files and easy to create, edit, and track. Thus, documentation is an integral part of the development process vs. an afterthought.
  • End to end tests are easy to run by anyone, so when there are issues to debug, they are tool that is regularly used by developers.
  • It is easy to purchase things needed to do my job and improve the company as everyone is issued a credit card, and expense reports are generated automatically. There is no motivation to bypass the process.

Tools/workflows/process should help the people doing the work go faster, not slow them down. If this is the case, you won’t need to force them on people. If this is not the case, the process needs work.

:balance_scale: 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, vertical scaling is becoming increasingly important. And that is where YOUR Platform matters.

:busts_in_silhouette: Why meetings?

There are many reasons to call meetings:

  1. Accountability
  2. Knowledge transfer
  3. Transparency
  4. Status
  5. Review
  6. Oversight
  7. Improve/maintain relationships
  8. Brainstorming

However, in this age of excellent collaboration tools, meetings are a very inefficient way to handle the first 6 items on the above list. If your workflow does not provide complete transparency into what everyone is doing for everyone, then your workflow needs improvement.

1 Like

:busts_in_silhouette: 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, the stronger our relationships will be.

Modern workflow tools provide a tremendous opportunity for human interactions at a scale that is impossible to accomplish with meetings. They provide transparency. The stream of activity is visible to all, and anyone can participate (or ignore) at any time. There are so many more opportunities for positive interaction than a weekly, or even daily status meeting.

However, it is necessary to have a culture that encourages and promotes transparency and frequent, positive interactions. It starts with the example of those at the top. Do you provide positive feedback, give helpful suggestions, and ask thoughtful questions in the course of work? Do you follow the development activity and use the communication features of the workflow tools such as Issues/PRs/project boards comments?

:busts_in_silhouette: Efficient meetings

There are a lot of good ideas for effective meetings:

There are good reasons to have a meeting (hanging out, brainstorming, setting priorities, making decisions), but in this age, sharing information is probably not one of them. People should have access to information before the meeting, and the goal of the meeting should also be known ahead of time. It is like planning your day the night before — your subconscious has time to work on it, and you are prepared. Prepared people are efficient.

:busts_in_silhouette: 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 management 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 40 hours are manifested is through other people. It’s, hey, can you join this meeting? Hey, can we do a one-on-one? Hey, can we do some planning? Hey, can we do? Every bit of it is something that pulls someone who’s actually working on things away from that work and into the managerial orb. And I think we just finally came to the realization we did not need that. We do not need that at our scale, that we can supplement the work that we’re doing with a handful of managerial practices or protocols, things that don’t even require human to run.

The following article also discusses the subject:

We once more have no full-time managers at 37signals

:email: Email filters

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

Email filters which automatically put emails into folders can help tame this problem. Gmail already tries to do this automatically with their Primary, Promotions, Social, and Updates. However, we can also do things like the following:

  • filter emails for every project/context into a separate folder. You can trigger of senders, subject, etc.
  • filter notifications from workflow tools (Github, Trello, etc.) into folders. If there are separate projects, then create separate folders for each project.
  • filter email newsletters into two folders: news-high-priority, and news-low-priority – the former is the ones you want to read, and the latter you just browse occasionally.
  • create a “personal” folder that emails outside of work get filtered into.

This is automation that makes information easier to process. Of course some emails will still slip into your inbox, but for most of our email, everything is grouped into a single context. This greatly improves our efficiency in processing them.

The critical thing is to use an email client that makes it easy to create filters. Thunderbird works pretty well.

:hammer_and_wrench: The critical features of workflow tools

Tools are what enable knowledge work in the information age. Several critical features:

  1. Efficient access to information
  2. Collaboration
  3. Automation

We’ll discuss more in the future posts …

:hammer_and_wrench: The defining characteristic of a good workflow tool

As mentioned in the previous post, modern workflow tools provide efficient access to information, collaboration, and automation.

The real power is when these three things come together in one environment. The defining characteristic of a good workflow tool is … integration.

There are powerful project board tools like Jira or Trello. There are great communication tools like Discourse, Discord, Slack, and Email. There are popular code review tools like Gerrit. But good things happen when you bring all these things together into one workflow tool, which I will call Git*: Github, Gitlab, Gitea, or Forgejo. Then everything has context, and relationships between different types of information are easy to create. Integration in a tool is a powerful thing where the overall value is much greater than the sum of the individual features.

:hammer_and_wrench: 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 solution for small/midsize teams building products. Can be run on a $5/mo Linode or Digital Ocean cloud server.
  • Forgejo: is a fork of Gitea focused more on community and security.

I’ll call the above Git*. These tools set a new standard for workflow integration.

:counterclockwise_arrows_button: 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.

:white_check_mark: 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 systems, nothing is guaranteed. There will be problems, especially during integration and new use scenarios. No supplier is guaranteed. We can’t anticipate all the use cases of a complex system.

So the more important questions are:

  • Can we start integration and testing earlier?
  • Do we have automated testing?
  • Can we easily update deployed systems?
  • Can we pivot to new components as required?
  • Do we have processes and workflows in place to quickly and confidently make any needed changes (hardware or software)?

:technologist: 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 generators → Libraries → OSS → Google search → Zephyr → etc. AI is just another step.

Coding has always been the easy part. Requirements, innovation, collaboration, architecture, integration, debugging, etc. – these are the hard parts. There will always be a place for skilled humans … people with intuition, creativity, experience, taste, vision, and style. People who see and can do what does not already exist.

If all you do is translate well-defined requirements into code, then yeah, I’d be worried. However, there is a lot more that needs to be done that is of much higher value, and not enough people to do it. Step up!

:weary_face: 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 spacing violations in a PCB layout
  • building physical prototype circuits and trying a range of different components
  • organizing parts or physical materials without an easy way to identify or sort them

If this describes what you are doing, there may be an opportunity for workflow or automation improvements. This is the kind of work computers do best – to free you up for what humans do best.

:joystick: 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 asking for a new feature we did not anticipate.
  • Bugs showing up in the field.
  • Security problems in a dependency.
  • Cloud vendor infrastructure problems.
  • Supply chain issues (have we forgotten COVID already)?

But if we do the first list, then we are prepared to handle the second. However, we tend to focus most of our energy on the 2nd list (onerous contracts with vendors, extensive manual testing of the “final” release, etc.) and think we are controlling the situation, when in reality we are not – it’s just an illusion. Really, it is change that we fear, as change is associated with a lack of control. But it is change that gives us control.

:construction_worker: 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 of a committee, but rather a lone person exploring the boundaries of knowledge, careful observation, and making new connections from what already exists. And really, invention is not anything new, but rather a discovery of the universal truths that exist in our universe – the laws of nature.

Increasingly, we need to be good at both – the focus and solitude required for deep work, and the collaboration required to build complex systems. The great ideas will generally come from the former, but the ability to do anything useful with them requires the latter.

Dysfunction arises when we mix these two modes up.