1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# Source Layout
The source tree maps to the DNS namespace that we own. The purpose of this
mapping is to keep things organized hierarchically in how they are deployed on
the Internet. The main 'common' space is `com.simatime`, everything else should
be related to the application.
Development aspects should be localized to their sub-namespaces as much as
possible. Only after sufficient iteration such that interfaces are solidified
and functionality is well-established should some code be promoted up the
namespace hierarchy.
Boundaries and interfaces between namespaces should be small and
well-defined. Likewise, the functionality and purpose of a particular namespace
should be small and well-defined. Following the unix principle of "do one thing
and do it well" is advised.
# Development
To build code, do:
nix build -f default.nix <thing>
To get a repl:
nix run -f default.nix <thing>
And to deploy:
nix copy --to ssh://root@simatime.com ./result
ssh root@simatime.com $(realpath ./result)/bin/switch-to-configuration switch
# Goals of the developer workflow:
- have minimal ceremony
- default to asynchrony, but allow for synchronous work when necessary
- automate the boring stuff
- standardize environments, tooling, and versions to minimize friction while
collaborating
- support the longevity and self-sustainability of the project
Ideally, each contributor should be able to go off grid for a day or a week or
more, continue working offline, submit their work when finished, and have no or
minimal conflicts. This also refers to the resilience of the production systems.
We should never need "out of office" email auto-replies, or urgent contact. No
pager duty, no daily stand-ups. Yes, this policy will affect what code we write,
not just how we write it; that is by design.
## Org
## Git
## Email
## IRC
|