---
# System prepended metadata

title: Kubo retro

---

Copied into https://www.notion.so/pl-strflt/Kubo-0-16-Retro-a443367e799e48b7931935a924dff529

# Kubo retro


## Kudos

- :+1: :+1: :+1: :+1: lidel: landing specs :book: 
- :+1: :+1: steve: bringing order to chaos :angel: 
- Thanks to Hugo for discovering all these security issues. :bug: 
- Thanks to Piotr for helping us with the DX and improving our day to day.  :hourglass_flowing_sand: 
- Adin for being very generous with his time :timer_clock:
- Thanks to Steve for keeping us on the right path
- Thanks to Antonio for delegated routing

## What went well

- :+1: :+1: release every 6 months → ~5 weeks
    - Helping other teams that rely on our software (libp2p with webtransport for example)
- Reframe 
- The headcount is more than the double
- We are doing specs before the functionality, and we are adding specs for old work
- We closed a lot of long-standing loose ends (hamt sharding, cid->multihash migration)
    - still have cidv1 migration
- Security posture is improving
- We're starting to become proactive instead of reactive :cool: 
    - Maybe due to team growth and knowledge transfer?
- Multiple good external contributions (blake3, gateway file, \_redirect file)

## What could be improved

- triming the PR backlog (especially things that are 80% done) (also consider schomatis situation)
- we have so many open issues without timely correspondence
    - The bot message says "within two business days" which is completely wrong.
    - we should have metrics about issues not meeting "SLA", maybe bug us in Slack
- Even changing the release cadence, we can land too few new functionality on every release because (I think) we have too much technical debt unresolved.
- Sharness (I would like to make a grant about that)
    - grant would be for porting all tests to Go
- DX/UX
  - "Official Kubo RPC client libraries" -- still a mess ([JS (*wip*)](https://github.com/ipfs/kubo/issues/9125), [GO (🫣)](https://github.com/ipfs/kubo/issues/9124))
  - "Unofficial Kubo RPC client libraries" (e.g., [Python](https://github.com/ipfs-shipyard/py-ipfs-http-client/issues/316), [Java](https://github.com/ipfs-shipyard/java-ipfs-http-client/issues/194)) -- lacking maintenance
    - ~~What is Java ?~~ kek
  - MultiRepo overhead -- multiple PRs to make changes, even when you know what to do (imagine being external contributor)
- Reframe not default (on gateways ?)
- we are quite bad at estimating effort and maintenance costs (results in overcommitting and getting stretched too thin) :+1:
- The way we handle breaking changes in core libraries AND/OR have no regression tests that would guard against regressions
    - case study: https://github.com/ipfs/go-cid/issues/144 (what would happen if I did not react? bit scary that we most likely have such regressions happening in other places and nobody notices + no tests to detect regressions in libs around ecosystem-wide core concepts like codecs)
- We accept third party bytes from random peers, but we rarely have any fuzzing tests
- There are user cohorts that we have very little knowledge of how they're using our products
- We prefer shiny things instead of improving and maintaining the base.
- reid: hire a TPM to do specs
- we don't have a formal threat model for IPFS, so weighing security is very ad-hoc
- we were surprised by other peoples' plans for IPFS (e.g. indexers)
- WTF is going with IPVM ?
- We should work more than one in a feature/functionality/fix.

## todo

- @Jorropo write a document about goals and milestone for a sharness removal in favor of `go test`
  (Must exercise the binary end to end, use easy to use go based system, ...)
- reid: TPM for specs
- @Jorropo bootstrap threat model for Kubo then review it with the team
- A lot of ideas on where to improve things, no time to execute them.
- @Galargh kill welcome bot "two business days"
- lidel: create issue for consolidating go api clients
- add task to archive all ipfs repos in ipfs-shipyard
    - check w/ lidel
- guseggert: get involved w/ ipvm wg

## learnings

- significant projects should have at least 2 people working on them full-time (for knowledge dissemination)