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:
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.
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.
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.
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?
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.
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.
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.
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.
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)?
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!
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.
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.
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.