Skip to content

Commit ebefe73

Browse files
committed
docs: update decision docs around slack, pnpm, uv, load-testing
1 parent 03239f2 commit ebefe73

File tree

6 files changed

+181
-12
lines changed

6 files changed

+181
-12
lines changed

docs/code-of-conduct.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ The HOT community principles are:
4040
- **Be respectful.** Not all of us will agree all the time, but disagreement is
4141
no excuse for poor behavior and poor manners. We might all experience some
4242
frustration now and then, but we cannot allow that frustration to turn into a
43-
personal attack. Its important to remember that a community where people feel
43+
personal attack. It's important to remember that a community where people feel
4444
uncomfortable or threatened is not a productive one. Members of the HOT
4545
community should be respectful when dealing with other members as well as with
4646
people outside the HOT community.
@@ -79,9 +79,9 @@ The HOT community principles are:
7979
technical, happen easily and often. It is important that we resolve such
8080
disagreements and differing views constructively. At times it can be hard to
8181
appreciate a viewpoint that contradicts your own perceptions. Instead of pushing
82-
back, try to understand where the other person is coming from, and dont be
82+
back, try to understand where the other person is coming from, and don't be
8383
afraid to ask questions. You can be most helpful if your own replies serve to
84-
clarify, rather than to escalate an issue. Also dont forget that it can be
84+
clarify, rather than to escalate an issue. Also don't forget that it can be
8585
easy to make mistakes, and allow for the possibility that the mistake may have
8686
been yours. When this happens it is better to resolve the issue together, and
8787
to learn from the experience together, than to place blame.

docs/decisions/0006-slack.md

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,55 @@
1-
# Use Slack to engage with our community members
1+
# Use Slack as our primary team and community chat platform
2+
3+
## Context and Problem Statement
4+
5+
We need a platform for:
6+
7+
- Day-to-day team communication and asynchronous coordination.
8+
- Community engagement and support.
9+
- Integration with project tooling (e.g., CI/CD notifications, GitHub activity).
10+
- Easy onboarding for new collaborators and contributors.
11+
12+
Our ideal platform would also:
13+
14+
- Be accessible to external contributors.
15+
- Support persistent message history.
16+
- Be open and interoperable, with low risk of vendor lock-in.
17+
- Respect user privacy and data sovereignty.
18+
19+
## Considered Options
20+
21+
- Slack
22+
- Zulip
23+
- Mattermost
24+
- Rocket.Chat
25+
- Matrix / Element
26+
27+
## Decision Outcome
28+
29+
Slack was adopted early in our organizational growth, largely because:
30+
31+
- Many existing and incoming collaborators were already on Slack.
32+
- It provided a smooth UX with strong mobile and desktop support.
33+
- NGO discounts made the Pro plan affordable, allowing for full message history and
34+
integrations.
35+
36+
However, as we scale and become more conscious of long-term sustainability, Slack's
37+
proprietary nature and closed ecosystem present issues.
38+
39+
Migrating to an open platform would align better with our values, but the migration
40+
cost and risk of fracturing our community are currently too high.
41+
42+
## Consequences
43+
44+
- ✅ Good, because our community is already established on Slack.
45+
- ✅ Good, because integrations (e.g., with GitHub, monitoring tools, deployment
46+
notifications) are mature and easy to configure.
47+
- ✅ Good UX, especially for newcomers, thanks to wide adoption and familiar UI.
48+
- ❌ Bad, because Slack is a proprietary, closed platform with limited options
49+
for self-hosting or data ownership.
50+
- ❌ Bad, because the free tier is too limited (e.g., no full message history),
51+
making us reliant on discounted paid plans.
52+
- ❌ Bad, migration to open alternatives (e.g., Zulip or Matrix) would be technically
53+
possible but socially risky, as many users may not follow or adapt easily.
54+
- ❌ Bad, limited support for open standards and federation restricts long-term
55+
resilience.

docs/decisions/0007-pnpm.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,39 @@
11
# Use `pnpm` as our frontend dependency manager
2+
3+
## Context and Problem Statement
4+
5+
In our frontend projects, we need a reliable, efficient, and developer-friendly package
6+
manager for JavaScript/TypeScript dependencies.
7+
8+
Key concerns include:
9+
10+
- Speed and disk usage efficiency.
11+
- Deterministic and reproducible installs.
12+
- Compatibility with existing tools and workflows.
13+
- Minimizing node_modules bloat and install conflicts.
14+
15+
## Considered Options
16+
17+
- npm
18+
- yarn (classic or berry)
19+
- pnpm
20+
21+
Options not considered: package managers used by runtimes other than NodeJS,
22+
such as Deno or Bun.
23+
24+
## Decision Outcome
25+
26+
- pnpm was selected as our default package manager due to its performance benefits,
27+
disk space efficiency, and strict dependency resolution.
28+
- Compared to npm and yarn, pnpm uses a content-addressable storage system and hard
29+
links to avoid duplication.
30+
- It also enforces more consistent dependency resolution, helping to catch errors
31+
early in development.
32+
33+
## Consequences
34+
35+
- ✅ Fast install speeds, especially in CI environments.
36+
- ✅ Reduced disk usage thanks to shared dependency storage.
37+
- ✅ More deterministic builds with stricter dependency isolation.
38+
- ❌ Less familiar for some contributors compared to npm/yarn.
39+
- ❌ Occasional compatibility issues with legacy packages expecting a flat node_modules.

docs/decisions/0008-uv.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,37 @@
11
# Use `uv` as our backend dependency manager
2+
3+
## Context and Problem Statement
4+
5+
We need a modern Python package management tool that is:
6+
7+
- Much faster than pip and pip-tools.
8+
- Able to handle lock files and virtual environments cleanly.
9+
- Better at resolving complex dependency trees reproducibly.
10+
11+
## Considered Options
12+
13+
- pip + virtualenv
14+
- pipenv
15+
- poetry
16+
- pdm
17+
- uv
18+
19+
## Decision Outcome
20+
21+
uv (by Astral) was selected for its speed, strict reproducibility,
22+
and modern tooling ergonomics.
23+
24+
It significantly improves dependency resolution times and offers a
25+
seamless developer experience.
26+
27+
Unlike traditional tools like pip, uv performs rapid dependency resolution and installs,
28+
while producing lock files that ensure consistency across platforms and environments.
29+
30+
## Consequences
31+
32+
- ✅ Extremely fast dependency resolution and installation (Rust based).
33+
- ✅ Modern, opinionated tooling with strong defaults.
34+
- ✅ Simplifies management of virtual environments and lock files.
35+
- ✅ Support for workspace packages, to allow for easier monorepo setups.
36+
- ❌ Less mature ecosystem and community support (as of 2025, growing fast!).
37+
- ❌ Requires team familiarity with new workflows.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Use k6 or Oha for application load testing
2+
3+
## Context and Problem Statement
4+
5+
We need lightweight tools to simulate real-world traffic for
6+
performance testing of our APIs and services.
7+
8+
Requirements include:
9+
10+
- Easy setup and usage.
11+
- Ability to run both quick, one-off benchmarks and complex scripted scenarios.
12+
- CI/CD integration capability.
13+
14+
## Considered Options
15+
16+
- Apache JMeter
17+
- Locust
18+
- k6
19+
- oha
20+
- wrk
21+
22+
## Decision Outcome
23+
24+
We adopted a hybrid approach using oha for simple benchmarks and
25+
k6 for more advanced, scripted load tests.
26+
27+
oha is fast and easy to use for quick HTTP benchmarking (similar to wrk,
28+
but with a simpler interface and better reporting).
29+
30+
k6 is a developer-centric load testing tool that supports JavaScript
31+
scripting for complex test scenarios, integrates well with CI pipelines,
32+
and produces meaningful metrics.
33+
34+
## Consequences
35+
36+
- ✅ oha gives us a fast, no-frills tool to test latency and throughput of HTTP endpoints.
37+
- ✅ k6 allows scripting advanced load test scenarios using JavaScript, including
38+
auth flows and dynamic data.
39+
- ✅ Both tools are CLI-friendly and CI-compatible.
40+
- ❌ Splitting tools means learning two interfaces.
41+
- ❌ k6 can be resource-intensive during heavy test scenarios.

docs/techdoc/README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ documentation is as follows:
8080
- Features: A breakdown of each integral part of the product, their
8181
functionality and purpose
8282
- Benefits: How the features give users an edge over other similar
83-
products. In other words, whats in it for the user.
83+
products. In other words, what's in it for the user.
8484
- Usage: A step by step process of how to use the product
8585
- Support / Frequently Asked Questions (about the product)
8686
- License
@@ -93,7 +93,7 @@ these are what I believe to be some of the most important.
9393
#### 2. Structure for Project Documentation
9494

9595
Project documentation is the process of recording the key project
96-
details that are needed to implement a project. Its like a roadmap of
96+
details that are needed to implement a project. It's like a roadmap of
9797
what the project is and all necessary information about what it
9898
entails. Main structural components are in the following order:
9999

@@ -112,7 +112,7 @@ entails. Main structural components are in the following order:
112112

113113
System documentation is an all-encompassing record of details of a
114114
full working system. It is very similar to the structure of product
115-
documentation but its usually on a wider scale. It may even include
115+
documentation but it's usually on a wider scale. It may even include
116116
some forms of product and process documentation within it. In addition
117117
to the structure of product documentation above, other key components
118118
it might include are: **architecture design**, **program source code**
@@ -146,7 +146,7 @@ added to and built upon.
146146
negates confusion for readers / users and just simplifies things.
147147

148148
2. **Important features should be put in bold**. For example “select
149-
from map” and ‘’ODK Collect can be easily overlooked by readers if
149+
from map” and 'ODK Collect' can be easily overlooked by readers if
150150
they aren't highlighted, even though they are important features.
151151

152152
3. **Generally simplifying words and phrases**. This makes
@@ -156,17 +156,17 @@ added to and built upon.
156156
“ODK incorporates a new functionality” can become “ODK has brought in a new feature”.
157157

158158
“Field Mappers select (or are allocated) individual tasks within a
159-
projects AOI” could be changed to “Field Mappers choose or are
160-
given tasks that are part of a projects Areas Of Interest.”
159+
project's AOI” could be changed to “Field Mappers choose or are
160+
given tasks that are part of a project's Areas Of Interest.”
161161

162162
4. **Avoid long paragraphs**. Short paragraphs that pass a clear
163163
message are less clumsy and flustering for readers. Breaking down
164164
topics into little, easy to understand chunks, is more user
165165
friendly.
166166

167167
5. **Maintain a positive tone in the writing.**. Keep the text
168-
positive and informative. Avoid words like obviously and
169-
basically, that may be interpreted as demeaning or
168+
positive and informative. Avoid words like 'obviously' and
169+
'basically', that may be interpreted as demeaning or
170170
condescending. Do not expect readers to have a certain amount of
171171
knowledge on specific aspects, break down everything that needs to
172172
be broken down.

0 commit comments

Comments
 (0)