diff --git a/.astro/types.d.ts b/.astro/types.d.ts index fa1cb5b..9478a7b 100644 --- a/.astro/types.d.ts +++ b/.astro/types.d.ts @@ -257,6 +257,13 @@ declare module 'astro:content' { collection: "posts"; data: InferEntrySchema<"posts"> } & { render(): Render[".mdx"] }; +"building-better-organizations/index.mdx": { + id: "building-better-organizations/index.mdx"; + slug: "building-better-organizations"; + body: string; + collection: "posts"; + data: InferEntrySchema<"posts"> +} & { render(): Render[".mdx"] }; "content-calendar-first-month-reflections/index.mdx": { id: "content-calendar-first-month-reflections/index.mdx"; slug: "content-calendar-first-month-reflections"; diff --git a/public/atproto.excalidraw b/public/atproto.excalidraw new file mode 100644 index 0000000..fea8c76 --- /dev/null +++ b/public/atproto.excalidraw @@ -0,0 +1,1025 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "cy8Y1OFTCL0BMxxf8bIcV", + "type": "text", + "x": 411.4140625, + "y": 176.2421875, + "width": 143.74794006347656, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "1-RZrOVox_rvcK5wojyXL" + ], + "frameId": null, + "roundness": null, + "seed": 1825803192, + "version": 49, + "versionNonce": 1814787256, + "isDeleted": false, + "boundElements": null, + "updated": 1708991082502, + "link": null, + "locked": false, + "text": "Lexicons", + "fontSize": 36, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 32, + "containerId": null, + "originalText": "Lexicons", + "lineHeight": 1.25 + }, + { + "id": "ITwgOOfJJYWfCw9n11XRs", + "type": "text", + "x": 249.20751190185547, + "y": 221.61328125, + "width": 462.89959716796875, + "height": 100, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "1-RZrOVox_rvcK5wojyXL" + ], + "frameId": null, + "roundness": null, + "seed": 1124629448, + "version": 189, + "versionNonce": 1442665160, + "isDeleted": false, + "boundElements": null, + "updated": 1708991082502, + "link": null, + "locked": false, + "text": "Contract that defines how to \"speak\nthe same language\"\n- endpoints (URLs)\n- \"data schema\" (how requests/responses look)", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 93, + "containerId": null, + "originalText": "Contract that defines how to \"speak\nthe same language\"\n- endpoints (URLs)\n- \"data schema\" (how requests/responses look)", + "lineHeight": 1.25 + }, + { + "id": "UZs3wTO-6zkKVfGCr8fFE", + "type": "text", + "x": 311.9572448730469, + "y": 352.7734375, + "width": 105.60546875, + "height": 23, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "1-RZrOVox_rvcK5wojyXL" + ], + "frameId": null, + "roundness": null, + "seed": 1513554632, + "version": 131, + "versionNonce": 290201016, + "isDeleted": false, + "boundElements": null, + "updated": 1708991082502, + "link": null, + "locked": false, + "text": "com.atproto", + "fontSize": 20, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "com.atproto", + "lineHeight": 1.15 + }, + { + "id": "ggM6i03rq795J0iEwoyQE", + "type": "text", + "x": 290.880859375, + "y": 388.01171875, + "width": 151.8198699951172, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "1-RZrOVox_rvcK5wojyXL" + ], + "frameId": null, + "roundness": null, + "seed": 1453994696, + "version": 147, + "versionNonce": 257407432, + "isDeleted": false, + "boundElements": null, + "updated": 1708991082502, + "link": null, + "locked": false, + "text": "Core concepts:\n- User Identity", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 43, + "containerId": null, + "originalText": "Core concepts:\n- User Identity", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 183, + "versionNonce": 2121246392, + "isDeleted": false, + "id": "a4FCD1DL_rDF-rp7KxWnr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 566.6478958129883, + "y": 353.076171875, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 80.048828125, + "height": 23, + "seed": 102902984, + "groupIds": [ + "1-RZrOVox_rvcK5wojyXL" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1708991082502, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 2, + "text": "app.bsky", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "app.bsky", + "lineHeight": 1.15, + "baseline": 18 + }, + { + "type": "text", + "version": 234, + "versionNonce": 123930056, + "isDeleted": false, + "id": "1sNkQLhdcBMEGScXJZlLp", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 549.0797500610352, + "y": 386.931640625, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 119.69987487792969, + "height": 50, + "seed": 1506890696, + "groupIds": [ + "1-RZrOVox_rvcK5wojyXL" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1708996656701, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Microblogging\n- User likes", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Microblogging\n- User likes", + "lineHeight": 1.25, + "baseline": 43 + }, + { + "id": "z297tvb3W2sZtBkgyVIRR", + "type": "text", + "x": 287.4788360595703, + "y": 535.625, + "width": 424.9798278808594, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "83A92-HhyRX9HM8NPMNgT" + ], + "frameId": null, + "roundness": null, + "seed": 1274900920, + "version": 153, + "versionNonce": 1229991112, + "isDeleted": false, + "boundElements": null, + "updated": 1708991634569, + "link": null, + "locked": false, + "text": "User Data Repositories", + "fontSize": 36, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 32, + "containerId": null, + "originalText": "User Data Repositories", + "lineHeight": 1.25 + }, + { + "id": "9xcIuD2djgSM3rdFcie9Y", + "type": "text", + "x": 249.39535522460938, + "y": 597.0496651785714, + "width": 492.27960205078125, + "height": 150, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "83A92-HhyRX9HM8NPMNgT" + ], + "frameId": null, + "roundness": null, + "seed": 236288712, + "version": 225, + "versionNonce": 2013784520, + "isDeleted": false, + "boundElements": null, + "updated": 1708997643058, + "link": null, + "locked": false, + "text": "Collections of data (records) about a single user\n Includes action taken like:\n- Making posts\n- Deleting posts \n- Liking something\n- Following someone", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 143, + "containerId": null, + "originalText": "Collections of data (records) about a single user\n Includes action taken like:\n- Making posts\n- Deleting posts \n- Liking something\n- Following someone", + "lineHeight": 1.25 + }, + { + "id": "FOrhNnqHMbsgPqskz-tFV", + "type": "text", + "x": 235.25250244140625, + "y": 818.0062255859375, + "width": 511.1278076171875, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "iO1Jzy3IMNVnUqRylYp1r" + ], + "frameId": null, + "roundness": null, + "seed": 2031061192, + "version": 34, + "versionNonce": 707827384, + "isDeleted": false, + "boundElements": null, + "updated": 1708992922384, + "link": null, + "locked": false, + "text": "Personal Data Server (PDS)", + "fontSize": 36, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 32, + "containerId": null, + "originalText": "Personal Data Server (PDS)", + "lineHeight": 1.25 + }, + { + "id": "KNy1_xKqI29Q0kz75JZG2", + "type": "text", + "x": 257.9010009765625, + "y": 869.7233014787946, + "width": 479.299560546875, + "height": 275, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "iO1Jzy3IMNVnUqRylYp1r" + ], + "frameId": null, + "roundness": null, + "seed": 1882941368, + "version": 542, + "versionNonce": 1733895864, + "isDeleted": false, + "boundElements": null, + "updated": 1708997693615, + "link": null, + "locked": false, + "text": "Stores repositories + media files of one or more\n users and allows everyone to query them\n\n- User can easily move to a different one\n(which PDS you are on is an internal detail)\n- Cheap to host\n- Multiple users can be on same PDS\n- Interactions don't go through the PDS\n- Provides access to stream of activity on the\nwhole PDS\n- PDS can delete illegal content", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 268, + "containerId": null, + "originalText": "Stores repositories + media files of one or more\n users and allows everyone to query them\n\n- User can easily move to a different one\n(which PDS you are on is an internal detail)\n- Cheap to host\n- Multiple users can be on same PDS\n- Interactions don't go through the PDS\n- Provides access to stream of activity on the\nwhole PDS\n- PDS can delete illegal content", + "lineHeight": 1.25 + }, + { + "id": "FcU4OMv5bw53kWl_APvoj", + "type": "text", + "x": 302.669921875, + "y": 1220.53125, + "width": 420.83984375, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "5uxUxdZp8LeJuvXmkrP0h" + ], + "frameId": null, + "roundness": null, + "seed": 395235512, + "version": 164, + "versionNonce": 1739505080, + "isDeleted": false, + "boundElements": null, + "updated": 1708993898673, + "link": null, + "locked": false, + "text": "Indexing Infrastructure", + "fontSize": 36, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 32, + "containerId": null, + "originalText": "Indexing Infrastructure", + "lineHeight": 1.25 + }, + { + "id": "9c0ttsoN2zApLTreiooFu", + "type": "text", + "x": 245.39553833007812, + "y": 1279.11328125, + "width": 526.0995483398438, + "height": 125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "5uxUxdZp8LeJuvXmkrP0h" + ], + "frameId": null, + "roundness": null, + "seed": 121083576, + "version": 361, + "versionNonce": 796804792, + "isDeleted": false, + "boundElements": null, + "updated": 1708993898673, + "link": null, + "locked": false, + "text": "Like a \"search engine\" crawls the web, the indexing \ninfrastructure crawls PDSes and collects their data\n\n- More expensive and complex to operate than PDS\n- Client app can choose which index(es) to read from", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 118, + "containerId": null, + "originalText": "Like a \"search engine\" crawls the web, the indexing \ninfrastructure crawls PDSes and collects their data\n\n- More expensive and complex to operate than PDS\n- Client app can choose which index(es) to read from", + "lineHeight": 1.25 + }, + { + "id": "c4QJiAkYc4ghwLNhLMrCe", + "type": "text", + "x": 228.5999526977539, + "y": 1422.2366943359375, + "width": 73.47196960449219, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "bgiBBVD_hcga2HQozCttF", + "5uxUxdZp8LeJuvXmkrP0h" + ], + "frameId": null, + "roundness": null, + "seed": 1013491144, + "version": 243, + "versionNonce": 1182052280, + "isDeleted": false, + "boundElements": null, + "updated": 1708993898673, + "link": null, + "locked": false, + "text": "Relay", + "fontSize": 28, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 25, + "containerId": null, + "originalText": "Relay", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 934, + "versionNonce": 1689647288, + "isDeleted": false, + "id": "EmMLi5UoMoaSRmZHLA0uV", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 55.95109558105469, + "y": 1464.8109130859375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 407.0196838378906, + "height": 275, + "seed": 1425482952, + "groupIds": [ + "bgiBBVD_hcga2HQozCttF", + "5uxUxdZp8LeJuvXmkrP0h" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1708993898673, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Creates the Firehose a.k.a a stream\nof all updates in the network it's\nconnected to and stores them\n\n- Verifies content of repos is \"sound\"\n- Does initial data cleaning and filters\nout clear spam\n- Aggregates all the updates and saves\na copy \n- Does not actually look at the \"lexicon\"\nthe data is using just pushes it through", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Creates the Firehose a.k.a a stream\nof all updates in the network it's\nconnected to and stores them\n\n- Verifies content of repos is \"sound\"\n- Does initial data cleaning and filters\nout clear spam\n- Aggregates all the updates and saves\na copy \n- Does not actually look at the \"lexicon\"\nthe data is using just pushes it through", + "lineHeight": 1.25, + "baseline": 268 + }, + { + "type": "text", + "version": 255, + "versionNonce": 501621176, + "isDeleted": false, + "id": "kftccOIM-NZVO-HzlvlFz", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 710.7173767089844, + "y": 1432.745849609375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 113.11993408203125, + "height": 35, + "seed": 1753901512, + "groupIds": [ + "5gdDIS9EUFS-MET-MSRi-", + "5uxUxdZp8LeJuvXmkrP0h" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1708993898673, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "App view", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "App view", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "id": "F47kzFutWZZwqKDSyD7Li", + "type": "text", + "x": 556.6000061035156, + "y": 1476.304443359375, + "width": 391.97967529296875, + "height": 275, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "5gdDIS9EUFS-MET-MSRi-", + "5uxUxdZp8LeJuvXmkrP0h" + ], + "frameId": null, + "roundness": null, + "seed": 1132702152, + "version": 491, + "versionNonce": 62038456, + "isDeleted": false, + "boundElements": null, + "updated": 1708994021789, + "link": null, + "locked": false, + "text": "Service that turns the \ndata in the network in a \"user-friendly\"\nformat\n\n- How many followers does [user] have?\n- Who liked this post?\n- Creates the main timeline\n- Allows others to query its own data\n- Enforces moderation controls\n- Does not classify content OR\nbuild complex feeds", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 268, + "containerId": null, + "originalText": "Service that turns the \ndata in the network in a \"user-friendly\"\nformat\n\n- How many followers does [user] have?\n- Who liked this post?\n- Creates the main timeline\n- Allows others to query its own data\n- Enforces moderation controls\n- Does not classify content OR\nbuild complex feeds", + "lineHeight": 1.25 + }, + { + "id": "jGajGtVPQEdY3hjJQz2Sk", + "type": "text", + "x": 190.19053649902344, + "y": 1793.03271484375, + "width": 147.74392700195312, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "7QwAN370f3YWZCTqXKI9f" + ], + "frameId": null, + "roundness": null, + "seed": 19382456, + "version": 64, + "versionNonce": 850179272, + "isDeleted": false, + "boundElements": null, + "updated": 1708994334331, + "link": null, + "locked": false, + "text": "Labelers", + "fontSize": 36, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 32, + "containerId": null, + "originalText": "Labelers", + "lineHeight": 1.25 + }, + { + "id": "agEYhMG00475dZ0CARVdT", + "type": "text", + "x": 38.000213623046875, + "y": 1857.8818359375, + "width": 454.99957275390625, + "height": 200, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "7QwAN370f3YWZCTqXKI9f" + ], + "frameId": null, + "roundness": null, + "seed": 832178632, + "version": 360, + "versionNonce": 591125432, + "isDeleted": false, + "boundElements": null, + "updated": 1708994334331, + "link": null, + "locked": false, + "text": "Looks at the stream of posts created by \nthe relay and provides content classification \n\n- User can choose which labeler(s) it wants\nto use\n- App view consume the labels from the \nlabeler (or PDS)\n- These labels are also published in a stream", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 193, + "containerId": null, + "originalText": "Looks at the stream of posts created by \nthe relay and provides content classification \n\n- User can choose which labeler(s) it wants\nto use\n- App view consume the labels from the \nlabeler (or PDS)\n- These labels are also published in a stream", + "lineHeight": 1.25 + }, + { + "id": "KDW5Pc38OX0s--IPRFMCS", + "type": "text", + "x": 620.4623107910156, + "y": 1793.5029296875, + "width": 278.38787841796875, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "67oPPa4ldDB9ycYExq9HF" + ], + "frameId": null, + "roundness": null, + "seed": 1015816904, + "version": 53, + "versionNonce": 1130051000, + "isDeleted": false, + "boundElements": null, + "updated": 1708994671173, + "link": null, + "locked": false, + "text": "Feed Generator", + "fontSize": 36, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 32, + "containerId": null, + "originalText": "Feed Generator", + "lineHeight": 1.25 + }, + { + "id": "8EgRHCanlChK8PNPDVvYz", + "type": "text", + "x": 568.1459655761719, + "y": 1858.5810546875, + "width": 370.05963134765625, + "height": 125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "67oPPa4ldDB9ycYExq9HF" + ], + "frameId": null, + "roundness": null, + "seed": 28641224, + "version": 218, + "versionNonce": 459678152, + "isDeleted": false, + "boundElements": null, + "updated": 1708994671173, + "link": null, + "locked": false, + "text": "Publishes a list of ids of posts that\nmakes up a feed\n\n- AppView turns those ids into the \nactual posts", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 118, + "containerId": null, + "originalText": "Publishes a list of ids of posts that\nmakes up a feed\n\n- AppView turns those ids into the \nactual posts", + "lineHeight": 1.25 + }, + { + "id": "dmh8fDRUwXPnZ3pqTmja0", + "type": "text", + "x": 408.54129791259766, + "y": 2106.24267578125, + "width": 240.4799041748047, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 764301256, + "version": 106, + "versionNonce": 902193096, + "isDeleted": false, + "boundElements": null, + "updated": 1708994797972, + "link": null, + "locked": false, + "text": "User Identity", + "fontSize": 36, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 32, + "containerId": null, + "originalText": "User Identity", + "lineHeight": 1.25 + }, + { + "id": "v9IiijoO79Il4WqhDoHiH", + "type": "text", + "x": 188.66278076171875, + "y": 2162.082763671875, + "width": 649.7994384765625, + "height": 475, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1997113784, + "version": 866, + "versionNonce": 928806088, + "isDeleted": false, + "boundElements": [ + { + "id": "c6pd6KPgqfj3Quohgq0eK", + "type": "arrow" + }, + { + "id": "h8W7nr2dTwZxoeE13ums_", + "type": "arrow" + } + ], + "updated": 1708996510726, + "link": null, + "locked": false, + "text": "- AtProto uses the DNS system as a base for user identity\n- Parts of the system can make choices based on e.g. subdomain,\nbut they currently don't\nIMPORTANT REQUIREMENT: ability to change handle\n\nEACH ACCOUNT HAS IMMUTABLE DECENTRALIZED ID\n- Have the form of \"did:[protocol]:identifier\"\n- Activity is recorded by using the DID of the other user\n\nW3C says how to go from DID to a document with more details\nabout the user. In @proto this specifies:\n- Handle of user\n- URL of their (current) PDS\n- Public key (their signature)\n\nBSky supports 2 different DID protocols:\n- WEB (uses URLs) did:web:essentialrandomness.com\n- PLC (Bluesky's own) did:plc:eclio37ymobqex2ncko63h4r\n", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 468, + "containerId": null, + "originalText": "- AtProto uses the DNS system as a base for user identity\n- Parts of the system can make choices based on e.g. subdomain,\nbut they currently don't\nIMPORTANT REQUIREMENT: ability to change handle\n\nEACH ACCOUNT HAS IMMUTABLE DECENTRALIZED ID\n- Have the form of \"did:[protocol]:identifier\"\n- Activity is recorded by using the DID of the other user\n\nW3C says how to go from DID to a document with more details\nabout the user. In @proto this specifies:\n- Handle of user\n- URL of their (current) PDS\n- Public key (their signature)\n\nBSky supports 2 different DID protocols:\n- WEB (uses URLs) did:web:essentialrandomness.com\n- PLC (Bluesky's own) did:plc:eclio37ymobqex2ncko63h4r\n", + "lineHeight": 1.25 + }, + { + "id": "c6pd6KPgqfj3Quohgq0eK", + "type": "arrow", + "x": 644.9830729166666, + "y": 2615.4702148437495, + "width": 85.20489415320787, + "height": 44.58984375, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 717752264, + "version": 44, + "versionNonce": 922766280, + "isDeleted": false, + "boundElements": null, + "updated": 1708996482997, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 85.20489415320787, + 44.58984375 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "v9IiijoO79Il4WqhDoHiH", + "focus": 0.36098562342414026, + "gap": 22.977294921874545 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "L1eUfH0OpOjd6qDZPACWx", + "type": "text", + "x": 499.023701985677, + "y": 2670.5255533854165, + "width": 301.5997314453125, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 813724104, + "version": 155, + "versionNonce": 1574371272, + "isDeleted": false, + "boundElements": null, + "updated": 1708996221402, + "link": null, + "locked": false, + "text": "can resolve to user document\nby asking https://plc.directory/", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 43, + "containerId": null, + "originalText": "can resolve to user document\nby asking https://plc.directory/", + "lineHeight": 1.25 + }, + { + "id": "h8W7nr2dTwZxoeE13ums_", + "type": "arrow", + "x": 657.2291666666669, + "y": 2499.754475911458, + "width": 182.74739583333326, + "height": 1.0546875, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 675884728, + "version": 37, + "versionNonce": 918384072, + "isDeleted": false, + "boundElements": null, + "updated": 1708996510726, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 182.74739583333326, + -1.0546875 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "v9IiijoO79Il4WqhDoHiH", + "focus": -0.42193552386405436, + "gap": 1.5143432617188637 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "WQxGp5-ctIq78HO-g9WSS", + "type": "text", + "x": 832.878387451172, + "y": 2459.1359863281245, + "width": 391.55963134765625, + "height": 125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 2088934344, + "version": 252, + "versionNonce": 1410606536, + "isDeleted": false, + "boundElements": null, + "updated": 1708996557031, + "link": null, + "locked": false, + "text": "BlueSky hosts the private keys and\nauthenticates user with \nusername + password instead.\nAtProto doesn't care, but also doesn't\nforce a service to.", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 118, + "containerId": null, + "originalText": "BlueSky hosts the private keys and\nauthenticates user with \nusername + password instead.\nAtProto doesn't care, but also doesn't\nforce a service to.", + "lineHeight": 1.25 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/src/content/posts/building-better-organizations/index.mdx b/src/content/posts/building-better-organizations/index.mdx new file mode 100644 index 0000000..f1066b1 --- /dev/null +++ b/src/content/posts/building-better-organizations/index.mdx @@ -0,0 +1,303 @@ +--- +title: The Quest for an Ethical Organization +tagline: What do you mean "no one has quite figured it out, yet"? +tags: + - +streaming schedule +created_at: 2024-02-27 15:24:49 +--- + +Anon on Tumlbr asked: + +> Hello, your proposition about ethical business really intrigued me, and thank +> you for pointing my way to the Sustainable Economies Law Center! I really +> wanna learn more about this, but I don't really know where to go, do you mind +> sharing if you have any more sources of reference? + +Thank you for asking, anon! As it turns out, you just activated one of my ~~trap +cards~~ special interests. So, time for a story, an infodump, and the public +unveiling of my Extravaganza #4 slides. + +![](./intro.png) + +## Searching for Wisdom + +When I started working on better online spaces, I knew that to tackle a problem +of that size I'd (eventually) need to form an organization to oversee the +effort. Despite being a much more innocent, bright-eyed software engineer whose +experience predominantly came from within large corporations, **I had heard plenty +of horror stories about independent efforts degenerating into a mismanaged mess, +and was determined to figure out how to avoid this happening.** After all, my goal +was to build an organization that would carry forward my ethical principles in a +way I could be–ideally, _remain_–proud of. + +My plan was overall straightforward: go very, very slow, find more experienced +people to hound with questions, then, after finding the organizations who are +Doing It Right™, copy their homeworks. After a lot of false starts, however, I +came to a realization: in the overwhelming majority of cases, organizations +haven't _really_ figured out how to solve the problems that come when many +people are working together towards a goal[^0]–no matter how much _everyone_ in +it cares about the goal and wants the effort and organization to succeed. + +## The Truth about Organizations + +Nowadays, I believe that organization don't start "good" and become +dysfunctional through the incompetence of misguided individuals; instead, +without someone desperately working to remain ahead and pull them out of +inevitable issues, they naturally devolve into chaos. Managing an organization +is a countinuous struggle against the tendency groups of humans have to go +against the best interest of the collective. + +Now, I imagine this could come across as a misanthropic position. I don't +believe that's the case. In a perfect world, humans would have their needs met, +their lives stable, and would be taught effective collaboration and collective +governance as they grow up. Instead, we're all operating in a world that's +crumbling around us, while carrying around intergenerational work trauma born +out of a world where people build empires on the shoulders of those below them. + +In this situation, even if you want to build the best, most stable organization, +how are you supposed to _know_ how to do it? And even if you set out to be +better at it than most–_more careful, more understanding, more informed_–how are +you supposed to continue doing it while the amount of people bringing their own +baggage in grows, and you find yourself shorter and shorter in time and emotional +energy? + +## Looking Beyond the Web + +At my most frustrated, I would have almost told you this is an impossible problem +that no one quite knows how to solve. However, by almost accident[^1], I found out +about two different (but similar!) ways to run businesses and organizations that are +currently being researched and popularized: + +- **[Teal Organizations](https://en.wikipedia.org/wiki/Teal_organisation),** an + organizational theory centered on worker autonomy and peer relationships. +- **[Sociocracy](https://en.wikipedia.org/wiki/Sociocracy),** a theory of + governance centered on consent and psychological safety. + +Now, there's _way too much_ I'd want to infodump on when talking about these +paradigms. However, I'll have to leave that for another article. Instead, I'll +try to give you pointers about where to learn more[^1_5], and attempt to not be +carried away. + +### Teal organizations + +Teal organizations have been studied by Frederic Laloux, a former McKinsey +partner[^2], for his book [Reinventing +Organizations](https://www.reinventingorganizations.com/). Compared to the books +on Sociocracy (in the next section), "Reinventing Organizations" is targeted +towards a business management public, and it's a 500-page read I struggle to +reccommend to people who aren't used to them. _All of that said_, both this book +and its illustrated version (a lighter read, but still not great), are available +as ["pay what you want"](https://www.reinventingorganizations.com/pay-what-feels-right.html). +So, if you're curious, do consider downloading them and giving a read to the sections that +look interesting, or to the end of chapter summaries. Skip Part 1 and go directly to part 2. + +![](./teal-orgs.png) + +### Sociocracy + +While Sociocracy has a deeper history than Teal organizations, I've found out about it +(and got most of my information) from [Sociocracy for All](https://www.sociocracyforall.org/)[^3], +a nonprofit dedicated to promoting sociocracy as a sustainable way of governance. They have +[a lot of different books](https://www.sociocracyforall.org/books/) available, +but here's two I recommend: + +- [Many Voices One + Song](https://www.sociocracyforall.org/many-voices-one-song-2/), a + "comprehensive manual covering all topics relevant to sociocracy in + organizations." This is bigger than some of the very small books they have, + but not huge. While it acts as a manual, it also explains the theory behind + the governance models it proposes, and it will definitely provoke thoughts and + provide valuable insights even if read "recreationally". +- [Collective Power](https://www.sociocracyforall.org/collective-power/), a book + on "effective collective building principles, that highlights unity, power + sharing, and governance as crucial for impactful change". This is a lot more + theoretical than the previous book (and much longer), but it's an incredibly + enlightening exploration of the problems that arise when trying to work collectively, + and what can be done to lessen them. + +You can find the table of content for both books at the link. There are some free +sociocracy resources on their website too, but I haven't personally made use of them[^4]. + +![](./sociocracy.png) + +## Knowing the Path vs Walking the Path + +While I'm obviously very happy about having found these systems, I'm always +somewhat nervous about sharing them without caveats. Indeed, while having found +guidance makes the journey _easier_, it doesn't (unfortunately) make it _easy_. +As we move to understand how we can implement these system in the +organization(s) me and my allies are building, the complexity of fitting these +systems within our limitations remains daunting. You cannot simply read a book +and implement it, and there are unique (and less unique) challenges we face that +make this an uphill climb. + +Unfortunately, I believe, people are often less charitable with people who try to +do things right and fail, than with people who just + +### Issue 0 – Money + +Let's get it out of the way: the answer to a lot of "how do we...?" can be +straightforwardly solved by throwing money at the problem. Whether it's hiring +someone who can get things done efficiently and independently, paying for the +help of an expert, or buying classes (or books) for collaborators[^5], money is +a convenient way to make a hard journey easier. + +Most importantly, however, money buys _time_. Time to figure things out, time to +try and fail, and time to eventually learn how to succeed. + +Without money–_tale as old as time_–progress is harder, slower, and more +brittle. + +### Issue 1 – "Unfortunately, as you probably already know, people" + +More originally (and yet somewhat still obviously), "the tendency of people to +be, well, _people_" is a huge barrier in creating an organization that works. As +I've touched upon in the beginning, society does not equip us for the inevitable +difficulties of working collectively towards a shared goal. + +Even further, the reality of a life under capitalism is incredibly stressful for +everyone involved.Especially with a group that is so heavily full of +neurodivergent, disabled people whose life can becoem chaotic at any minute, and +have often been full of trauma and rejection, it's easy to accidentally step on +each other's toes. And even when no toes have been stepped on, we're still +fallible. We have bad days, we say the wrong thing, we misunderstand. And rifts +take time and energy to heal. + +It's impossible to arbitrate all conflicts that happen in a group, unless you +can specifically hire someone trained to do so (which you most likely don't have +money to do). People willing to arbitrate are rarer and rarer these days (they +burn out quickly, and many of us know better by this point). And unfortunately, +people most often don't know how to confront each other, and allow resentment to +brew, or see any confrontation as zero sum conflict. + +### Issue 2 – Trust and Psychological Safety + +Something that's repeatedly called out by books on both types of organization is +how trust and psychological safety are paramount when it comes to building an +organization that works. This in part relates to what I said before: when people +come in with their own baggage and trauma, it's easy to accidentally trigger +conflict. But beyond that, trust and psychological safety require building +structures and practices that don't come for free, and that require both +emotional work and the ability to sit with and analyze their own discomfort from +everyone involved. + +But most of all, trust and psychological safety requires a degree of being +exclusionary with people that don't mesh well with the group's culture and +working style. And the only way we have around this exclusivity impacting the +overall inclusivity of the broader efforts is to have more groups doing work, +and more people leading those groups so the burden of fighting for _everyone_ +isn't placed on the effort of a few. + +### Issue 3 – Skin in the Game + +People have different availability of contributions, different degrees of +energy, and different (and diversely rare[^5_5]) skills that they can bring into any +effort. While it's true that all this intersects with issues of diversity, and +that a fair and just group must be careful to not uncritically bring +capitalistic ideals back into their work, it's also true that not everyone doing +work is doing an equal amount of work (or an equally irreplaceable one[^6]), and is +not as committed and dedicated to the mission at hand. + +Eventually, people have different levels of "skin in the game" when it comes to +moving an organization forward. For many reasons, some of us are used to treating +organizations (and the software and projects they build) as a spectator sport, +and believe that as the "customer" or target audience, organizations are beholden +to catering to our own desires. Conversely, others believe that their desires +never matter, and that they have no ability to took issues they care about into +their own hands and champion them to resolution. + +People don't know what accountability means, and seek responsibility for +decisions, without responsibility for results. + +![](./journey.png) + +## The Future and How to help + +Having vented my frustration and fear about the future, I want to stress how +grateful I am to have found much better guidance on how to organize something as +ambitious as the organization(s) I'm trying to build [TODO: link to post]. +Obviously, it's not going to be just snapping fingers and making it happen. It's +going to be frustrating at times, messy even. But when people deeply understand +and respect this, it becomes easier to work togeether to make these the best +organizations they can be. + +It will take a bit before we can open up and welcome more people into our group. A +lot of coordination and work is going on behind the scenes. Once we do, when people +are willing to come in and pitch some help, it's important that they understand that +this is not just fitting into a well-oiled machine, it's _building the machine_ itself, +and be an active participant in the never-ending task of keeping it from breaking. + +In the meantime, if you want to help, here's how you can always help: + +1. Boost this article on socials. If you can, react to it! Add tags or comments, and + join in the conversation. Help us bringing this discussion to the larger web. +2. Become an official $upporter on Patreon or on this same website. +3. Follow us to be alerted of opportunities to collaborate on our open source projects, + or offer feedback on some of our material. + +Very excited for the future! + +[^0]: + The pattern generally went like this: Ms Boba, eyes shining bright, finds a new + organization with an interesting management system . Some time later, some news + comes out about the organization's internal struggles, and she realize those who she + thought "got it" don't actually "got it". Rinse, repeat. + +[^1]: + A friend of a consultant I hired recommended me a book on building organizations, and + I miracolously remembered to actually buy it 3 months after being told about it. + Take that, ADHD. + +[^1_5]: + If you want to skip the reading and just be reccommended _one_ book, my vote for a + committed but casual reader goes to [Collective Power](https://www.sociocracyforall.org/collective-power/). + +[^2]: + If you've never heard about McKinsey, John Oliver dedicated [an episode to + them](https://www.youtube.com/watch?v=AiOUojVd6xQ). I mention them here + because, while I 100% believe amazing people can work for unethical companies + (and even end up radicalized by the experience), Laloux's line of work explains + the context he's coming from in his research. Don't let this stop you from reading + the book and learning more about Teal Orgs though. It's _great_ stuff. + +[^3]: + Funnily enough, I found out about Sociocracy for All from [a + newsletter](https://enliveningedge.org/browse-topics/) that I found out about + from resources on Teal Organizations. If this all sounds connected, it's because + it is. While these are different systems, once you learn about them both, + similarities start emerging. + +[^4]: Clearly you don't need _free resources_ when you have a book-buying problem. +[^5]: + Both the sociocracy and the teal organizations books call out "training" as + one of the "must have" requirements for the successful onboarding of employees. + Among the training they both emphasize is effective conflict resolution, which + is something I've seen people repeatedly struggle with in our communities, and + that I wish I had money to train everyone in. + +[^5_5]: + Maybe an unpopular thing to say, but something I struggled with a lot before + I talked with other people doing this type of work and realized it was not a + "me" problem: people who can take a nebulous task, and bring it to completion + without constant handholding at an acceptable level of quality are _incredibly_ + rare. While it's true that not enough people get given opportunity to shine, and + that capitalism undervalues certain talent, it's also true that _"talent"_ + is in short quantity. + + An important caveat: this doesn't mean that people cannot be taught or trained into + becoming better at this type of work. A lot of collaborators I've had the pleasure + to work with have gone from not knowing where to start to incredible project leads. + But this takes time, energy, and training, and it's notoriously something that (if + you heed the advice given to startups) you shouldn't do until you have, well, enough + money to do so. You can see then how this impacts marginalized folks who're less likely + to be given chances, and why this is by itself a byproduct of discrimination, even + though we still need to contend with it. + +[^6]: + While it's true that certain people and skills are hard to replace, one must + make sure that this doesn't become an excuse to compromise on other + principles. However, the ability to do this also hinges on being able to + train more people in doing certain work, creating processes around it, and + being able to hire expertise should someone who was in a crucial position + need to step down for any reason. Once again, things that are more easily + solvable with money. diff --git a/src/content/posts/building-better-organizations/intro.png b/src/content/posts/building-better-organizations/intro.png new file mode 100644 index 0000000..5ea0521 Binary files /dev/null and b/src/content/posts/building-better-organizations/intro.png differ diff --git a/src/content/posts/building-better-organizations/journey.png b/src/content/posts/building-better-organizations/journey.png new file mode 100644 index 0000000..f42d436 Binary files /dev/null and b/src/content/posts/building-better-organizations/journey.png differ diff --git a/src/content/posts/building-better-organizations/sociocracy.png b/src/content/posts/building-better-organizations/sociocracy.png new file mode 100644 index 0000000..1c79084 Binary files /dev/null and b/src/content/posts/building-better-organizations/sociocracy.png differ diff --git a/src/content/posts/building-better-organizations/teal-orgs.png b/src/content/posts/building-better-organizations/teal-orgs.png new file mode 100644 index 0000000..dbad1d1 Binary files /dev/null and b/src/content/posts/building-better-organizations/teal-orgs.png differ