Developer Experience

This page outlines principles for Baserock and the areas of activity we're aiming to address.


  • Baserock improves iteratively - we can’t be sure to get it right first time
  • Baserock is tidy
    • our design is logical and understandable
    • we aim to have a ‘baserock way’ to do everything
  • Baserock is predictable and repeatable - what used to work should continue to work
  • Baserock is simple - as few LOC as possible, doing as few things as possible
  • Baserock workflow should be frictionless - we remove irritants and papercuts
  • Working with Baserock is fast and efficient
    • loops are optimised
    • no time is wasted wondering how to do what is needed
    • no time is wasted ‘yak shaving’
  • We minimise our delta/forking versus upstream
  • We standardise on git for everything
  • Baserock is completely traceable
    • it’s trivially easy to see what is in any Baserock system
    • as a developer it’s easy to diagnose what is wrong

Use Cases

There are broadly three phases of work in Baserock

  • Getting started (ie we are getting Baserock to work in the first place)
  • Engineering (ie Baserock is already up - we are adding new things and changing things)
  • Updating (ie we are providing ongoing bugfixes and updates to delivered/running systems)


  • use Baserock to get Baserock (as a development environment) working on a new architecture
  • use Baserock to get Baserock working on a not-yet-supported board
  • migrate existing applications and systems to Baserock from a different development environment
  • create new applications and systems in Baserock

ENGINEERING (working on a supported board)

  • build, integrate, validate and debug source for new components
  • do software engineering on existing components
  • diagnose, reproduce, debug and fix a problem in an existing baserock devel or target system
  • get my fix integrated back into my local upstream, or baserock mainline


  • take, apply and deploy 'official' updates for my own baserock devel system (repeatedly)
  • make, apply and deploy my own custom updates for my baserock devel system (repeatedly)
  • take, apply and deploy 'official' updates to a baserock target system (repeatedly)
  • make, apply and deploy custom updates (including cherry-pick from 'official') to a baserock target system (repeatedly)

Baserock Target Audience

Our target users are intelligent software engineers. We need to work on the command line, and to know normal unix commands. We need to be experienced in git, or learn it.

Improving Baserock

We want to improve the experience of using Baserock, by simplifying some of the workflows.

These pages contain some earlier attempts to define user stories and personas for the users in them: