Skip to content

Commit ea66873

Browse files
authored
docs: add a services page and link it from the home page (#139)
1 parent 9e5f475 commit ea66873

2 files changed

Lines changed: 72 additions & 0 deletions

File tree

‎docs/index.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ Every project is built with the same tooling
8989
[`ty`](https://github.com/astral-sh/ty)) under the MIT license, to one shared
9090
[standard](standard.md). Browse the full catalog below.
9191

92+
If you'd like help applying this stack to your own services, see [services](services.md).
93+
9294
## Project templates { #templates }
9395

9496
- [`fastapi-sqlalchemy-template`](https://github.com/modern-python/fastapi-sqlalchemy-template): Dockerized FastAPI + SQLAlchemy 2 + PostgreSQL app template with DI

‎docs/services.md‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Services
2+
3+
I'm Artur Shiriev, the maintainer of modern-python. Besides the open-source work, I help teams
4+
with their Python backends: auditing a codebase, setting up observability and CI, modernizing
5+
services, and leading the engineering side for a while.
6+
7+
The libraries stay free and MIT-licensed whether or not you hire me. You don't have to use them
8+
either. When one fits, it saves time; when it doesn't, I work with what your team already runs.
9+
10+
## Engineering health audit { #audit }
11+
12+
For teams that inherited a codebase, are about to grow one, or keep fighting the same incidents.
13+
14+
I look at:
15+
16+
- recent outages and incidents, what caused them, and which ones keep coming back
17+
- the defect backlog and the error tracker (Sentry, GlitchTip): which bugs matter and which can be
18+
closed
19+
- logs, traces and metrics: what is collected, what is noise, and what is missing
20+
- tech debt: outdated Python and packages, known vulnerabilities, test coverage, tests built on
21+
mocks, missing linters and type checks
22+
- CI, the release process, and how a change reaches production
23+
- the architecture diagrams, and whether they still match the code
24+
25+
You get a written report with findings ranked by impact and effort, a plan for the first fixes,
26+
and a call to go through it with your team. The audit doesn't change your code; fixes are a
27+
separate piece of work.
28+
29+
## Implementation sprints { #sprints }
30+
31+
Short, fixed-scope work that ends in merged pull requests in your repositories. Typical sprints:
32+
33+
- Observability. Structured logs, traces, metrics and error tracking in FastAPI, Litestar or
34+
FastStream services, usually with [`lite-bootstrap`](https://github.com/modern-python/lite-bootstrap),
35+
plus Grafana and Prometheus dashboards.
36+
- Quality gates. A `justfile` whose lint and test tasks run the same way locally and in CI, with
37+
ruff, ty, coverage and dependency checks, along the lines of the org's own [standard](standard.md).
38+
- A harness for coding agents. `AGENTS.md`, skills, CLI and MCP access to your error tracker, logs
39+
and metrics, and the hooks and CI checks that hold agent-written changes to the same bar as
40+
everyone else's.
41+
- Modernization. Upgrading Python and dependencies, and introducing
42+
[`modern-di`](https://github.com/modern-python/modern-di) for dependency injection,
43+
[`httpware`](https://github.com/modern-python/httpware) for typed, resilient HTTP clients, or
44+
[`faststream-outbox`](https://github.com/modern-python/faststream-outbox) for reliable event
45+
publishing.
46+
- Release process. Change requests, end-to-end tests built from test cases, and release scope
47+
collected automatically with [`release-scope`](https://github.com/modern-python/release-scope)
48+
and [`semvertag`](https://github.com/modern-python/semvertag).
49+
- Architecture as code. A [LikeC4](https://likec4.dev) model of the current system, kept in the
50+
repo next to the code.
51+
52+
## Fractional tech lead { #tech-lead }
53+
54+
For teams without a tech lead, or between two. I join part-time and run the whole loop:
55+
56+
- one-on-ones with each engineer about what slows them down and what they want to work on
57+
- regular outage and incident reviews that turn into prioritized follow-up tasks
58+
- grooming the defect and tech-debt backlog
59+
- the audit and sprints above, scheduled alongside product work
60+
61+
## Library support { #support }
62+
63+
For companies that run modern-python libraries in production: help with upgrades and migrations
64+
(for example from `that-depends` or `dependency-injector` to `modern-di`), a review of how the
65+
libraries are wired into your services, and help when an incident involves one of them.
66+
67+
## Get in touch { #contact }
68+
69+
Email [lesnik512@gmail.com](mailto:lesnik512@gmail.com) with a few lines about your team, your
70+
stack, and what you'd like fixed. I'll reply with questions or a proposal for scope and timing.

0 commit comments

Comments
 (0)