Competence
A local web app for running a team skills matrix, following Andy Sawyer's method in "Implementing a Skills Matrix Across Data Teams":
- Skill level on the Fibonacci scale 0/1/2/3/5/8, and desire on 1/2/3 (not interested, happy to do it, passionate). The article numbers desire 0/1/2; starting at 1 keeps a skill nobody is keen on from counting as 0.
- Competency = level × desire (0–24).
- Role targets, gaps, team flags, development goals, and comparisons between rounds.
- Certifications with expiry dates (held or not, required per role).
It runs on your own machine only (127.0.0.1), for one person: you, as facilitator. It works for any team: it ships with catalogues for a data team (the default) and a software development team (used by the demo), and other teams, technical or not, can start from their own catalogue file or an empty one.
The app's Guide (top menu) explains the method, how to run a round, and what every number and flag means.
Install and start
Needs uv (or pipx: pipx install competence, then leave out uvx below).
uvx competence init --demo # once: demo database, a dev team of 6 invented people over 3 rounds
uvx competence --demo # starts the app and opens http://localhost:8000 (Ctrl+C to stop)
For real use:
uvx competence init # once: the real database, from the data-team catalogue (no people yet)
uvx competence # starts the app
For a team that isn't a data team, start from the dev-team catalogue (front end / back end), a blank one or your
own file (the blank catalogue, empty.toml in the package, explains the layout):
uvx competence init --catalogue dev # front end / back end developers
uvx competence init --catalogue empty # one role, no skills: build the rest in Admin
uvx competence init --catalogue my-team.toml # roles, categories, skills, targets, level texts
- Where the data lives: a per-user folder,
%LOCALAPPDATA%\competenceon Windows,~/Library/Application Support/competenceon macOS and~/.local/share/competenceon Linux.--data DIR(beforeinit, e.g.competence --data D:\matrix init) uses another folder; pass it every time you start the app. - Catalogue files are read once. After
init, the database is the source of truth: change things in Admin. Admin → "Export the catalogue" saves what is in use (no people or ratings) as a file to start another database from. - Never overwrites:
initstops if the database file already exists. - Backs up on every start: the app copies the database to
backups/in the data folder before doing anything else. "Set all" in the targets grid backs up first too. There is no undo in the app: to go back, stop the app and copy a backup over the database file. These copies are on the same disk, so they don't replace an off-machine backup. The app keeps the newest 20 of its own backups per database and never touches other files inbackups/, so a renamed copy (e.g.matrix-before-cleanup.sqlite) stays. - The demo database is disposable. To reset it, delete
demo.sqlitein the data folder and runcompetence init --demo.
From a source checkout
Clone the repository and run the commands below from its folder; uv installs the dependencies on the first run.
uv run app.py [--demo] [--reload] and uv run seed.py [--demo] [--catalogue NAME|FILE] do the same as
competence and competence init, but keep the databases in the checkout's data/ folder (gitignored).
--reload restarts the app when the code changes. Run the tests with uv run pytest.
Data safety
- Personal data: the ratings are personal data about employees (GDPR). Keep the data folder on an encrypted disk
(BitLocker on Windows). In a source checkout,
data/is in.gitignore, so it's never committed. - Local only: the app listens on 127.0.0.1 only. It refuses host names other than localhost, which blocks DNS rebinding, and it refuses form posts from other websites.
- Nothing is lost: there's a backup on every start, and nothing that has ratings is ever hard-deleted.
Licence
Metadata
Release files for competence 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| competence-0.1.0.tar.gz | 126.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| competence-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 280.8 kB
Release files / competence-0.1.0.tar.gz
| Download URL | competence-0.1.0.tar.gz |
|---|---|
| Size | 126.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a9a128d0e33b10a071be9c00e793dcc42acc471936475b106c5a0c96b0c0644d
|
|
BLAKE2b-256 checksum How to use checksums |
29a491aaf41aefe7930db21e78ed405958fba1239cda605b7cdb8e32508e496e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / competence-0.1.0-py3-none-any.whl
| Download URL | competence-0.1.0-py3-none-any.whl |
|---|---|
| Size | 154.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e9c43eed8dfedd72042809b42ca4f26a310bc2559700b2ecf7e7ca65818884d
|
|
BLAKE2b-256 checksum How to use checksums |
f77910e0713d18ce7d3f2d085a8780e84154840e32548095ecc002c952c51fbd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|