Binary Semaphore

About

Behind the work

Binary Semaphore takes its name from the simplest synchronization primitive there is, and we treat software the same way: small, well-defined parts that coordinate cleanly and hide the right details behind each interface.

We work across applied AI, distributed systems, and developer tools. We spend our effort on the essential complexity of a problem and refuse to let the accidental kind pile up, designing for reliability and maintainability from the start rather than bolting them on later. The current focus is inode, a CLI knowledge base that retrieves by meaning, written in Go.

How we work

Small parts, coordinated well

We keep the moving parts few and the boundaries between them clear. Most of a project is understanding the real problem before writing the code that solves it.

  1. 01

    Understand the problem

    We map the real problem and its constraints before writing code, so we build what is needed and not the longest feature list.

  2. 02

    Design the shape

    We decide the few well-defined parts and the boundaries between them. Most mistakes are cheaper to fix here than after the code is written.

  3. 03

    Build it honestly

    Simple, legible code with interfaces that tell the truth. We spend the effort on the essential complexity and keep the accidental kind out.

  4. 04

    Ship and keep it reliable

    We get it into production in small steps, watch how it behaves, and design for failure so it holds up as it grows.