You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<description>Live and Let Die: The Mail is Not Enough Hybrid Meetup #50 took place 2025-04-29 19:00 at Basislager Leipzig and we had an insightful presentation on How a Go project dies; lessons learned, challenges to revive it and the scars I got on the way.
17
+
Leandro tooks us on a journey into the postfix mail transport agent (MTA) monitoring project controlcenter, written in Go, how it started and factors that contributed to its stalling.</description>
<description>Live and Let Die: The Mail is Not Enough Hybrid Meetup #50 took place 2025-04-29 19:00 at Basislager Leipzig and we had an insightful presentation on How a Go project dies; lessons learned, challenges to revive it and the scars I got on the way.
17
+
Leandro tooks us on a journey into the postfix mail transport agent (MTA) monitoring project controlcenter, written in Go, how it started and factors that contributed to its stalling.</description>
<p>The slides can be found <ahref="/downloads/leipzig-gophers-50-2025-04-29-controlcenter-mta-monitoring-how-a-go-project-lives-and-dies.html">here</a>:</p>
<li>A monolith can look like a set of microservices too; with one database
67
+
per component and intra-process communication through channels</li>
68
+
<li>Reusability as beneficial <ahref="https://www.dcs.gla.ac.uk/~johnson/papers/RESS/Complexity_Emergence_Editorial.pdf">emergent property</a> – and not a goal in and of itself</li>
69
+
<li>Parsing postfix logs can be a challenge (cf. “<ahref="https://scispace.com/pdf/a-user-extensible-and-adaptable-parser-architecture-4nocz4o09k.pdf">A User-Extensible and
70
+
Adaptable Parser Architectur</a>")</li>
71
+
<li>Controlcenter took inspiration from Apple’s <ahref="https://en.wikipedia.org/wiki/Grand_Central_Dispatch">Grand Central
72
+
Dispatch</a> for handling
73
+
concurrency and taking advantage of multicore machines in the presence of
74
+
limitations (e.g. <em>usually, SQLite allows at most one writer to proceed
<li>The universe of possible postfix setups is huge, and it is impossible to
84
+
anticipate the layout of all log lines the application would ever encounter;
85
+
use a crash-first approach to iterate; implemented with a custom assertion
86
+
package (since Go does not have
87
+
<ahref="https://en.wikipedia.org/wiki/Assertion_(software_development)">assertions</a>); telemetry would help to learn about usage in the wild, but users may not support it</li>
88
+
<li>Early returns, or guard clauses, or the <ahref="https://scribe.rip/@matryer/line-of-sight-in-code-186dd7cdea88">left-hand rule</a> can lead to <em>else-less code</em> – also also avoid the <ahref="http://wiki.c2.com/?ArrowAntiPattern">arrow anti-pattern</a></li>
89
+
<li>Controlcenter decided against ORM: tighter coupling, but less complexity and more transparency</li>
90
+
<li>Unfortunately, great software with users does not automatically translate to a product with customers</li>
91
+
</ul>
92
+
<p>The open source project is looking for contributors. If you are into mailops, then please take
93
+
a look at <ahref="https://gitlab.com/leandrosansilva/controlcenter">controlcenter repository</a>.</p>
to a monolithic microservice approach with the now discontinued <ahref="https://serviceweaver.dev/">Service
99
+
Weaver</a>:</li>
100
+
</ul>
101
+
<blockquote>
102
+
<p>Under the covers, Service Weaver will dissect your binary along component
103
+
boundaries, allowing different components to run on different machines. – <ahref="https://serviceweaver.dev/docs.html">docs</a></p>
104
+
</blockquote>
105
+
<p>Reflected upon also in <ahref="https://arxiv.org/pdf/2401.11867">Modular Monolith: Is This the Trend in Software
106
+
Architecture?</a>; cf. <ahref="https://arxiv.org/pdf/2308.15281">Back to the Future: From
107
+
Microservices to Monolith</a>.</p>
108
+
<ul>
109
+
<li>Go has an a bit unusual set of ORM libraries: classical ones like
110
+
<ahref="https://gorm.io/index.html">GORM</a>, more code-generation oriented ones like
111
+
<ahref="https://sqlc.dev/">sqlc</a> or <ahref="https://github.com/ent/ent">ent</a>; fluent query
112
+
builder, like <ahref="https://github.com/stephenafamo/bob">bob</a>, or thin wrappers,
113
+
like <ahref="https://github.com/jmoiron/sqlx">sqlx</a>; generic
114
+
<ahref="https://github.com/go-goe/goe">goe</a> and more</li>
115
+
<li>Object-relational mapping works best until it does not</li>
116
+
<li>The Go project added telemetry and made the case that open source projects
117
+
can benefit from telemetry, and that telemetry can be implemented sensible,
118
+
too; Russ Cox has written about <ahref="https://research.swtch.com/telemetry">Transparent
119
+
Telemetry</a> as well</li>
120
+
<li>Hosting an email server yourself is not too complicated (cf. <ahref="https://github.com/mail-in-a-box/mailinabox">mail-in-a-box</a>), but there is a risk
121
+
being blacklisted and then miss out of important messages</li>
122
+
<li>If you run your own email server, you may receive less spam</li>
123
+
<li><ahref="https://www.emailisnotdead.com/">Is email dead</a>? Hint: while you read this
124
+
blog post, the world moved 115,403,640 (legitimate) emails forward.</li>
125
+
</ul>
126
+
<p>Thanks again to <ahref="https://www.linkedin.com/in/leandrosansilva/">Leandro</a> for the
127
+
talk and insights!</p>
128
+
<p><ahref="https://www.meetup.com/de-DE/leipzig-golang/">Join our meetup</a> to get notified of upcoming events.</p>
<description>Live and Let Die: The Mail is Not Enough Hybrid Meetup #50 took place 2025-04-29 19:00 at Basislager Leipzig and we had an insightful presentation on How a Go project dies; lessons learned, challenges to revive it and the scars I got on the way.
17
+
Leandro tooks us on a journey into the postfix mail transport agent (MTA) monitoring project controlcenter, written in Go, how it started and factors that contributed to its stalling.</description>
0 commit comments