Varnish
tcp/80
openresty
tcp/443
Open service 2a04:4e42:600::775:443 · cultivate.engineering
2026-01-31 07:13
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
server: openresty
etag: W/"3bd7-UfH40HYYn1UMdEOhKKrqrIPaUrw"
status: 200 OK
content-type: text/html; charset=utf-8
via: 1.1 varnish, 1.1 varnish, 1.1 varnish
cache-control: public, max-age=0
Accept-Ranges: bytes
Age: 99436
Date: Sat, 31 Jan 2026 07:13:33 GMT
X-Served-By: cache-ams2100086-AMS, cache-ams2100109-AMS, cache-sin-wsat1880064-SIN
X-Cache: MISS, HIT, MISS
X-Cache-Hits: 0, 12, 0
X-Timer: S1769843613.021644,VS0,VE178
Vary: Cookie, Accept-Encoding
x-request-id: 441e016b-758d-4ad5-8a79-f99ffde517ca
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=9e917cf4f8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.16">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.58/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42:400::775:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Sat, 10 Jan 2026 23:55:17 GMT
Age: 280425
X-Served-By: cache-ams2100109-AMS, cache-sin-wsss1830070-SIN
X-Cache: HIT, HIT
X-Cache-Hits: 20, 1
X-Timer: S1768089318.717228,VS0,VE1
Vary: Cookie, Accept-Encoding
x-request-id: 9a0d8ba6-928a-4825-9a72-e846da90425c
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42::775:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-lga21930-LGA X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089318.501598,VS0,VE1 x-request-id: 4509b07a-01c5-4037-bbfd-6df903125924 Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.131.7:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Sat, 10 Jan 2026 23:55:17 GMT
Age: 280425
X-Served-By: cache-ams2100109-AMS, cache-lga21963-LGA
X-Cache: HIT, HIT
X-Cache-Hits: 7, 1
X-Timer: S1768089318.506257,VS0,VE3
Vary: Cookie, Accept-Encoding
x-request-id: 2f8078de-e74a-413b-b976-bb8d800c0ec1
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 151.101.131.7:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-bom-vanm7210074-BOM X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089318.526976,VS0,VE0 x-request-id: 578e88a7-3cb3-454c-b636-f15b868bad34 Ghost-Fastly: true;production Alt-Svc: clear
Open service 2a04:4e42:200::775:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-vie6352-VIE X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089317.487623,VS0,VE0 x-request-id: 8d99cba8-e8e7-4bd0-bf1e-d10dc1d034de Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.3.7:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-vie6378-VIE X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089317.493606,VS0,VE1 x-request-id: b981f0bd-c7ff-4faa-9898-42afdeb6b2f1 Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.67.7:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-rtm-ehrd2290055-RTM X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089317.422858,VS0,VE0 x-request-id: ae9c009d-1f53-420c-94b7-b8d51eed5b2c Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.195.7:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-vie6337-VIE X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089317.470360,VS0,VE0 x-request-id: b8f769fa-78c8-4607-a769-e5f4c877bc4b Ghost-Fastly: true;production Alt-Svc: clear
Open service 2a04:4e42:200::775:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Sat, 10 Jan 2026 23:55:17 GMT
Age: 280425
X-Served-By: cache-ams2100109-AMS, cache-lga21931-LGA
X-Cache: HIT, HIT
X-Cache-Hits: 7, 1
X-Timer: S1768089317.462888,VS0,VE7
Vary: Cookie, Accept-Encoding
x-request-id: ef41fead-16a1-4e88-ab3f-acfb78ba981c
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 151.101.3.7:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Sat, 10 Jan 2026 23:55:17 GMT
Age: 280425
X-Served-By: cache-ams2100109-AMS, cache-lga21933-LGA
X-Cache: HIT, HIT
X-Cache-Hits: 7, 1
X-Timer: S1768089317.429008,VS0,VE5
Vary: Cookie, Accept-Encoding
x-request-id: 15a8701e-9c02-4683-89a9-3b299476f1ec
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42::775:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Sat, 10 Jan 2026 23:55:17 GMT
Age: 280425
X-Served-By: cache-ams2100109-AMS, cache-yyz4550-YYZ
X-Cache: HIT, HIT
X-Cache-Hits: 19, 1
X-Timer: S1768089318.521017,VS0,VE2
Vary: Cookie, Accept-Encoding
x-request-id: 4270a436-c6e6-4336-b480-ebdab6b6bbf1
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42:400::775:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-pao-kpao1770050-PAO X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089317.385378,VS0,VE1 x-request-id: 6765ba1a-64c9-4bd3-b4f4-7fb59c4b2028 Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.67.7:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Sat, 10 Jan 2026 23:55:17 GMT
Age: 280425
X-Served-By: cache-ams2100109-AMS, cache-sjc10030-SJC
X-Cache: HIT, HIT
X-Cache-Hits: 18, 1
X-Timer: S1768089318.533196,VS0,VE2
Vary: Cookie, Accept-Encoding
x-request-id: 155e495b-3a37-40e4-befc-74133648fef3
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42:600::775:80 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Sat, 10 Jan 2026 23:55:17 GMT Via: 1.1 varnish X-Served-By: cache-sin-wsss1830091-SIN X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1768089317.376214,VS0,VE1 x-request-id: 514488e1-24a3-4b92-965a-4c8e79a19bf2 Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.195.7:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Age: 280425
Date: Sat, 10 Jan 2026 23:55:17 GMT
X-Served-By: cache-ams2100109-AMS, cache-vie6372-VIE
X-Cache: HIT, MISS
X-Cache-Hits: 21, 0
X-Timer: S1768089317.336546,VS0,VE20
Vary: Cookie, Accept-Encoding
x-request-id: 894326d2-e385-4c00-8cb2-f61ca3a7798b
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42:600::775:443 · cultivate.engineering
2026-01-10 23:55
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-d1cdylwMgeUadAHHFST7BsYDeTs"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Sat, 10 Jan 2026 23:55:17 GMT
Age: 280425
X-Served-By: cache-ams2100109-AMS, cache-fra-eddf8230145-FRA
X-Cache: HIT, HIT
X-Cache-Hits: 1, 1
X-Timer: S1768089317.259192,VS0,VE1
Vary: Cookie, Accept-Encoding
x-request-id: b35372cc-27e9-4a04-a80a-a11da2dc9a51
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=b4b458fed8">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42:600::775:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-sin-wsat1880098-SIN X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.278631,VS0,VE0 x-request-id: 9d039884-b0e2-4313-96e8-ceec0afacec4 Ghost-Fastly: true;production Alt-Svc: clear
Open service 2a04:4e42:600::775:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 11:58:33 GMT
Age: 22
X-Served-By: cache-ams2100109-AMS, cache-sin-wsat1880062-SIN
X-Cache: HIT, HIT
X-Cache-Hits: 7, 1
X-Timer: S1766404713.491806,VS0,VE1
Vary: Cookie, Accept-Encoding
x-request-id: 36256d9a-b3d0-46e8-bf3c-f3d552544a38
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 151.101.195.7:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 11:58:33 GMT
Age: 22
X-Served-By: cache-ams2100109-AMS, cache-yyz4542-YYZ
X-Cache: HIT, HIT
X-Cache-Hits: 3, 1
X-Timer: S1766404713.208259,VS0,VE1
Vary: Cookie, Accept-Encoding
x-request-id: 04ecf56e-1a6e-4d08-bd2c-a540518674bf
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42:400::775:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-lga21944-LGA X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.191389,VS0,VE1 x-request-id: d2072e02-68cd-426e-94d9-78cab5ba045a Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.67.7:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-sin-wsat1880082-SIN X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.233322,VS0,VE0 x-request-id: 3005cdcb-574a-40c7-815e-b72280096fc2 Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.3.7:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-lga21950-LGA X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.138319,VS0,VE1 x-request-id: 2534599c-f410-45f9-8530-7307574a8477 Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.195.7:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-fra-eddf8230189-FRA X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.172013,VS0,VE1 x-request-id: f6a3d937-074d-494f-94b7-ed9b360d5383 Ghost-Fastly: true;production Alt-Svc: clear
Open service 2a04:4e42:400::775:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 11:58:33 GMT
Age: 22
X-Served-By: cache-ams2100109-AMS, cache-lcy-egml8630045-LCY
X-Cache: HIT, HIT
X-Cache-Hits: 5, 1
X-Timer: S1766404713.131999,VS0,VE1
Vary: Cookie, Accept-Encoding
x-request-id: 595ec4d4-55a3-44e0-9acc-e767a5d7c0bb
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42::775:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-lga21992-LGA X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.103700,VS0,VE0 x-request-id: 083e01c5-29dc-4616-b387-22ea81263716 Ghost-Fastly: true;production Alt-Svc: clear
Open service 2a04:4e42:200::775:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 11:58:33 GMT
Age: 22
X-Served-By: cache-ams2100109-AMS, cache-yyz4538-YYZ
X-Cache: HIT, HIT
X-Cache-Hits: 3, 1
X-Timer: S1766404713.143258,VS0,VE1
Vary: Cookie, Accept-Encoding
x-request-id: 5138b741-2981-4eea-b620-bcd4774da79d
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 151.101.3.7:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 11:58:33 GMT
Age: 22
X-Served-By: cache-ams2100109-AMS, cache-fra-eddf8230169-FRA
X-Cache: HIT, HIT
X-Cache-Hits: 1, 1
X-Timer: S1766404713.128001,VS0,VE2
Vary: Cookie, Accept-Encoding
x-request-id: ee481621-9458-4633-bb3b-ac7b4f81760f
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 2a04:4e42:200::775:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-lga21944-LGA X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.070654,VS0,VE1 x-request-id: 7d82ac06-326d-4ad6-aa34-f728de813730 Ghost-Fastly: true;production Alt-Svc: clear
Open service 2a04:4e42::775:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 11:58:33 GMT
Age: 22
X-Served-By: cache-ams2100109-AMS, cache-vie6332-VIE
X-Cache: HIT, HIT
X-Cache-Hits: 4, 1
X-Timer: S1766404713.110755,VS0,VE2
Vary: Cookie, Accept-Encoding
x-request-id: 4c539bbf-086e-4b5f-9a8f-2220e39a891e
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 151.101.131.7:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 11:58:33 GMT
Age: 22
X-Served-By: cache-ams2100109-AMS, cache-yyz4553-YYZ
X-Cache: HIT, HIT
X-Cache-Hits: 3, 1
X-Timer: S1766404713.144059,VS0,VE1
Vary: Cookie, Accept-Encoding
x-request-id: 98b891d0-32ee-4cc9-a161-d2bd4d4efa25
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh
Open service 151.101.131.7:80 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 0 Server: Varnish Retry-After: 0 Location: https://cultivate.engineering/ Accept-Ranges: bytes Date: Mon, 22 Dec 2025 11:58:33 GMT Via: 1.1 varnish X-Served-By: cache-lga21930-LGA X-Cache: HIT X-Cache-Hits: 0 X-Timer: S1766404713.031217,VS0,VE1 x-request-id: 0e098b2c-aef2-4b3e-8a40-6836c0ef70ff Ghost-Fastly: true;production Alt-Svc: clear
Open service 151.101.67.7:443 · cultivate.engineering
2025-12-22 11:58
HTTP/1.1 200 OK
Connection: close
Content-Length: 15319
Server: openresty
Content-Type: text/html; charset=utf-8
Status: 200 OK
cache-control: public, max-age=0
etag: W/"3bd7-HAfjFneBE8g3GhsgK5136PSjMDw"
Fastly-Restarts: 1
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Age: 22
Date: Mon, 22 Dec 2025 11:58:33 GMT
X-Served-By: cache-ams2100109-AMS, cache-sjc10025-SJC
X-Cache: HIT, MISS
X-Cache-Hits: 6, 0
X-Timer: S1766404713.166506,VS0,VE145
Vary: Cookie, Accept-Encoding
x-request-id: 5412282f-6ddb-4f70-a6a0-c5cf0dc5847f
Ghost-Fastly: true;production
Alt-Svc: clear
Page title: Cultivate Engineering
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cultivate Engineering</title>
<link rel="stylesheet" href="https://cultivate.engineering/assets/built/screen.css?v=5a4a66e056">
<style>
:root {
--background-color: #ffffff
}
</style>
<script>
/* The script for calculating the color contrast was taken from
https://gomakethings.com/dynamically-changing-the-text-color-based-on-background-color-contrast-with-vanilla-js/ */
var accentColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
accentColor = accentColor.trim().slice(1);
var r = parseInt(accentColor.substr(0, 2), 16);
var g = parseInt(accentColor.substr(2, 2), 16);
var b = parseInt(accentColor.substr(4, 2), 16);
var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
var textColor = (yiq >= 128) ? 'dark' : 'light';
document.documentElement.className = `has-${textColor}-text`;
</script>
<meta name="description" content="Thoughts on Software Engineering and Engineering Management">
<link rel="canonical" href="https://cultivate.engineering/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="Cultivate Engineering">
<meta property="og:type" content="website">
<meta property="og:title" content="Cultivate Engineering">
<meta property="og:description" content="Thoughts on Software Engineering and Engineering Management">
<meta property="og:url" content="https://cultivate.engineering/">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Cultivate Engineering">
<meta name="twitter:description" content="Thoughts on Software Engineering and Engineering Management">
<meta name="twitter:url" content="https://cultivate.engineering/">
<meta name="twitter:site" content="@TomCeulemans">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"publisher": {
"@type": "Organization",
"name": "Cultivate Engineering",
"url": "https://cultivate.engineering/",
"logo": {
"@type": "ImageObject",
"url": "https://cultivate.engineering/favicon.ico",
"width": 48,
"height": 48
}
},
"url": "https://cultivate.engineering/",
"name": "Cultivate Engineering",
"mainEntityOfPage": "https://cultivate.engineering/",
"description": "Thoughts on Software Engineering and Engineering Management"
}
</script>
<meta name="generator" content="Ghost 6.10">
<link rel="alternate" type="application/rss+xml" title="Cultivate Engineering" href="https://cultivate.engineering/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js" data-i18n="true" data-ghost="https://cultivate.engineering/" data-key="ba34c7ee615fd93f2ff60aeeb9" data-api="https://cultivate-engineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh