1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/> 2<!-- This site is hosted on Netlify. Anyone can build and deploy a site 3 like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=c2c66d42-65a6-4516-8a37-c508ed4f2258 4 Netlify hosting facts for this site: static/SSR served via Netlify Edge. --><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><link type="application/opensearchdescription+xml" rel="search" href="opensearch2.xml"/><style id="typography.js">html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}html{font:100%/1.75 'Merriweather','Georgia',serif;box-sizing:border-box;overflow-y:scroll;}*{box-sizing:inherit;}*:before{box-sizing:inherit;}*:after{box-sizing:inherit;}body{color:hsla(0,0%,0%,0.9);font-family:'Merriweather','Georgia',serif;font-weight:400;word-wrap:break-word;font-kerning:normal;-moz-font-feature-settings:"kern", "liga", "clig", "calt";-ms-font-feature-settings:"kern", "liga", "clig", "calt";-webkit-font-feature-settings:"kern", "liga", "clig", "calt";font-feature-settings:"kern", "liga", "clig", "calt";}img{max-width:100%;margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}h1{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;color:inherit;font-family:Montserrat,sans-serif;font-weight:900;text-rendering:optimizeLegibility;font-size:2.5rem;line-height:1.1;}h2{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;color:inherit;font-family:'Merriweather','Georgia',serif;font-weight:900;text-rendering:optimizeLegibility;font-size:1.73286rem;line-height:1.1;}h3{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;color:inherit;font-family:'Merriweather','Georgia',serif;font-weight:900;text-rendering:optimizeLegibility;font-size:1.4427rem;line-height:1.1;}h4{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;color:inherit;font-family:'Merriweather','Georgia',serif;font-weight:900;text-rendering:optimizeLegibility;font-size:1rem;line-height:1.1;letter-spacing:0.140625em;text-transform:uppercase;}h5{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;color:inherit;font-family:'Merriweather','Georgia',serif;font-weight:900;text-rendering:optimizeLegibility;font-size:0.83255rem;line-height:1.1;}h6{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;color:inherit;font-family:'Merriweather','Georgia',serif;font-weight:900;text-rendering:optimizeLegibility;font-size:0.75966rem;line-height:1.1;font-style:italic;}hgroup{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}ul{margin-left:1.75rem;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;list-style-position:outside;list-style-image:none;list-style:disc;}ol{margin-left:1.75rem;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;list-style-position:outside;list-style-image:none;}dl{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}dd{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}p{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}figure{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}pre{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;font-size:0.85rem;line-height:1.75rem;}table{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;font-size:1rem;line-height:1.75rem;border-collapse:collapse;width:100%;}fieldset{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}blockquote{margin-left:-1.75rem;margin-right:1.75rem;margin-top:0;padding-bottom:0;padding-left:1.42188rem;padding-right:0;padding-top:0;margin-bottom:1.75rem;font-size:1.20112rem;line-height:1.75rem;color:hsla(0,0%,0%,0.59);font-style:italic;border-left:0.32813rem solid hsla(0,0%,0%,0.9);}form{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}noscript{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}iframe{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}hr{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:calc(1.75rem - 1px);background:hsla(0,0%,0%,0.2);border:none;height:1px;}address{margin-left:0;margin-right:0;margin-top:0;padding-bottom:0;padding-left:0;padding-right:0;padding-top:0;margin-bottom:1.75rem;}b{font-weight:700;}strong{font-weight:700;}dt{font-weight:700;}th{font-weight:700;}li{margin-bottom:calc(1.75rem / 2);}ol li{padding-left:0;}ul li{padding-left:0;}li > ol{margin-left:1.75rem;margin-bottom:calc(1.75rem / 2);margin-top:calc(1.75rem / 2);}li > ul{margin-left:1.75rem;margin-bottom:calc(1.75rem / 2);margin-top:calc(1.75rem / 2);}blockquote *:last-child{margin-bottom:0;}li *:last-child{margin-bottom:0;}p *:last-child{margin-bottom:0;}li > p{margin-bottom:calc(1.75rem / 2);}code{font-size:0.85rem;line-height:1.75rem;}kbd{font-size:0.85rem;line-height:1.75rem;}samp{font-size:0.85rem;line-height:1.75rem;}abbr{border-bottom:1px dotted hsla(0,0%,0%,0.5);
4cursor:help;}acronym{border-bottom:1px dotted hsla(0,0%,0%,0.5);cursor:help;}abbr[title]{border-bottom:1px dotted hsla(0,0%,0%,0.5);cursor:help;text-decoration:none;}thead{text-align:left;}td,th{text-align:left;border-bottom:1px solid hsla(0,0%,0%,0.12);font-feature-settings:"tnum";-moz-font-feature-settings:"tnum";-ms-font-feature-settings:"tnum";-webkit-font-feature-settings:"tnum";padding-left:1.16667rem;padding-right:1.16667rem;padding-top:0.875rem;padding-bottom:calc(0.875rem - 1px);}th:first-child,td:first-child{padding-left:0;}th:last-child,td:last-child{padding-right:0;}blockquote > :last-child{margin-bottom:0;}blockquote cite{font-size:1rem;line-height:1.75rem;color:hsla(0,0%,0%,0.9);font-weight:400;}blockquote cite:before{content:"â ";}ul,ol{margin-left:0;}@media only screen and (max-width:480px){ul,ol{margin-left:1.75rem;}blockquote{margin-left:-1.3125rem;margin-right:0;padding-left:0.98438rem;}}h1,h2,h3,h4,h5,h6{margin-top:3.5rem;}a{box-shadow:0 1px 0 0 currentColor;color:#007acc;text-decoration:none;}a:hover,a:active{box-shadow:none;}mark,ins{background:#007acc;color:white;padding:0.10938rem 0.21875rem;text-decoration:none;}a.gatsby-resp-image-link{box-shadow:none;}</style><style data-href="/styles.8bbe35b68768df338b0d.css" id="gatsby-global-css">@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:100;src:local("Montserrat Thin "),local("Montserrat-Thin"),url(/static/montserrat-latin-100-4124805c0503dbfe42dd67d7f5715964.woff2) format("woff2"),url(/static/montserrat-latin-100-c8fb2f714bbc7bc3e8dfffa916b286dc.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:100;src:local("Montserrat Thin italic"),local("Montserrat-Thinitalic"),url(/static/montserrat-latin-100italic-e4bf47bd171a9b2a72dd84c58bf90edf.woff2) format("woff2"),url(/static/montserrat-latin-100italic-d1f3f2d02ee4d7d2d4b1ad865014f189.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:200;src:local("Montserrat Extra Light "),local("Montserrat-Extra Light"),url(/static/montserrat-latin-200-444ae007121264bc1969d49b4031f9b2.woff2) format("woff2"),url(/static/montserrat-latin-200-edbce16a90aa22c297a0307b85789837.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:200;src:local("Montserrat Extra Light italic"),local("Montserrat-Extra Lightitalic"),url(/static/montserrat-latin-200italic-f316c5d1ec40f3e68654c3f38b3999f3.woff2) format("woff2"),url(/static/montserrat-latin-200italic-d7bbb730d9b5e11720b3eb32326dcca7.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:300;src:local("Montserrat Light "),local("Montserrat-Light"),url(/static/montserrat-latin-300-0a7c6df06e85d978d096d4d18fd8d43d.woff2) format("woff2"),url(/static/montserrat-latin-300-5e86df2cad22d2ef2b03516334afae5e.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:300;src:local("Montserrat Light italic"),local("Montserrat-Lightitalic"),url(/static/montserrat-latin-300italic-c076c4892bc7a4be7b9097e97a35012d.woff2) format("woff2"),url(/static/montserrat-latin-300italic-37c74a8d2d0d36a0a2c6e9a37ee15b0c.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:400;src:local("Montserrat Regular "),local("Montserrat-Regular"),url(/static/montserrat-latin-400-501ce09c42716a2f6e1503a25eb174c9.woff2) format("woff2"),url(/static/montserrat-latin-400-f29d2b8559699b6beb5b29b25b8bc572.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:400;src:local("Montserrat Regular italic"),local("Montserrat-Regularitalic"),url(/static/montserrat-latin-400italic-882908d9950d9c86ebd380877f293d95.woff2) format("woff2"),url(/static/montserrat-latin-400italic-22e7b04e5f2a901d49d4d342315a715a.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:500;
4src:local("Montserrat Medium "),local("Montserrat-Medium"),url(/static/montserrat-latin-500-f0f2716c5fe401d175b88715e7d28685.woff2) format("woff2"),url(/static/montserrat-latin-500-991b453bf90a0980e78966d2af7e3d3a.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:500;src:local("Montserrat Medium italic"),local("Montserrat-Mediumitalic"),url(/static/montserrat-latin-500italic-4590ebba421b3288c305305d7fa7b504.woff2) format("woff2"),url(/static/montserrat-latin-500italic-f3d41e4cdcc2314e49ddcea751d6f87f.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:600;src:local("Montserrat SemiBold "),local("Montserrat-SemiBold"),url(/static/montserrat-latin-600-15c24f7109941777774ddd2c636c6a50.woff2) format("woff2"),url(/static/montserrat-latin-600-f6dc6096f48956908c1787d9a722570a.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:600;src:local("Montserrat SemiBold italic"),local("Montserrat-SemiBolditalic"),url(/static/montserrat-latin-600italic-6d10b80529d5c36c7c09fca7193af0fc.woff2) format("woff2"),url(/static/montserrat-latin-600italic-02c4833312d94b1b0866f073023a250e.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:700;src:local("Montserrat Bold "),local("Montserrat-Bold"),url(/static/montserrat-latin-700-79982cd1f74c6fa7451bf9b37ead09ff.woff2) format("woff2"),url(/static/montserrat-latin-700-957e93fbbe131a59791cd820d98b7109.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:700;src:local("Montserrat Bold italic"),local("Montserrat-Bolditalic"),url(/static/montserrat-latin-700italic-283438e9577fe6a684466bb100e105ec.woff2) format("woff2"),url(/static/montserrat-latin-700italic-ca627c5ccc65cf80c2ecaea44b997de9.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:800;src:local("Montserrat ExtraBold "),local("Montserrat-ExtraBold"),url(/static/montserrat-latin-800-35386154b78d046218fc8f88a44ff515.woff2) format("woff2"),url(/static/montserrat-latin-800-756655905d91b77960888262e7d58d35.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:800;src:local("Montserrat ExtraBold italic"),local("Montserrat-ExtraBolditalic"),url(/static/montserrat-latin-800italic-e1b52a7bd83e2324db6d92bdc206844c.woff2) format("woff2"),url(/static/montserrat-latin-800italic-a69f0add9d86c1a84311d7dd8693ba4a.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:900;src:local("Montserrat Black "),local("Montserrat-Black"),url(/static/montserrat-latin-900-260c2ea3ef57feb82251952e605a36d5.woff2) format("woff2"),url(/static/montserrat-latin-900-186cae8091da578150d81958e217714a.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:900;src:local("Montserrat Black italic"),local("Montserrat-Blackitalic"),url(/static/montserrat-latin-900italic-d785fb9fc74588ffb7f306799709a97d.woff2) format("woff2"),url(/static/montserrat-latin-900italic-43b527fe77254f97ea36e2b54e845ec4.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:300;src:local("Merriweather Light "),local("Merriweather-Light"),url(/static/merriweather-latin-300-b1158cfcd4aacb9d8fb61625e37af46a.woff2) format("woff2"),url(/static/merriweather-latin-300-cc7de05e166e90320d7d896e0f72a19d.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:300;src:local("Merriweather Light italic"),local("Merriweather-Lightitalic"),url(/static/merriweather-latin-300italic-8fe52a48089d6ebe46db0b8e7cc66263.woff2) format("woff2"),url(/static/merriweather-latin-300italic-e1331f5397c2a673f9d3765138debdb5.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:400;src:local("Merriweather Regular "),local("Merriweather-Regular"),url(/static/merriweather-latin-400-8276fdb72ae8f4714d4e6eba704cc39f.woff2) format("woff2"),url(/static/merriweather-latin-400-69f09800f4f6479d06e44eba837df872.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:400;src:local("Merriweather Regular italic"),local("Merriweather-Regularitalic"),url(/static/merriweather-latin-400italic-3a9be9ea9f7aa4af6de7307df21d9fc0.woff2) format("woff2"),url(/static/merriweather-latin-400italic-d76079ed7541a433a54f79316de086e9.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:700;src:local("Merriweather Bold "),local("Merriweather-Bold"),url(/static/merriweather-latin-700-fa534be7ffa380e39a7f6e03bf9a5e03.woff2) format("woff2"),url(/static/merriweather-latin-700-ba56ea84b8084b7ff9677f50d3cd81bd.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:700;src:local("Merriweather Bold italic"),local("Merriweather-Bolditalic"),url(/static/merriweather-latin-700italic-1ef5edaaa20ae53ea50399884c5e48c6.woff2) format("woff2"),url(/static/merriweather-latin-700italic-534bc9e7ce93c73d73426e46acd78092.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:900;src:local("Merriweather Black "),local("Merriweather-Black"),url(/static/merriweather-latin-900-7528fb70e8a4a82c7305e72ff43ac25f.woff2) format("woff2"),url(/static/merriweather-latin-900-3799b6e2f5ed3fcccf9d7a708d7419fa.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:900;src:local("Merriweather Black italic"),local("Merriweather-Blackitalic"),url(/static/merriweather-latin-900italic-e1b4d2aaa78e12ad84aaf8a56321e4c2.woff2) format("woff2"),url(/static/merriweather-latin-900italic-2ae22f731b3424e8dbb4b37f7ca6e708.woff) format("woff")}:root{--card-background:#fff;--primary-color:#352d39;--secondary-color:#581845;--third-color:rgba(50,126,175,0.9803921568627451);--forth-color:#335c81;--link-color:#942874}.mainTitle{font-size:3.95285rem;margin-bottom:2.625rem;margin-top:0}.mainTitle,.secondaryTitle,.topicsTitle{color:var(--primary-color);font-family:Montserrat,sans-serif;margin-top:0}.aboutMe-container,.allPosts-container,.searchPosts-container{background:var(--card-background);border-radius:1rem;border:0;box-shadow:0 0 1.5rem 0 rgba(0,0,0,.2);margin-bottom:2rem;padding:2rem 4rem}h1{margin-top:1.75rem}.allPosts-postTitle,.blog-postTitle{margin:.5rem 0}.allPosts-postTitle,.searchPosts-postTitle,h1,h4{color:var(--primary-color)}.blog-postTitle,h2,h3,h4{color:var(--secondary-color)}h3{margin-top:0}.allPosts-postTitle:hover,.blog-postTitle:hover,.searchPosts-postTitle:hover{text-decoration:underline}.allPosts-postInfo,.searchPosts-postInfo{font-size:12px}.post-title{color:var(--secondary-color);font-size:2.5rem}.about-info,.post-info{color:grey;font-size:.83255rem;line-height:1.75rem;margin-bottom:1.75rem;margin-top:-1.75rem}.post-footer-title{color:var(--primary-color);font-family:Montserrat,sans-serif}
4.post-footer-navigation{display:flex;flex-wrap:wrap;justify-content:space-between;list-style:none;padding:0;margin-top:1.45rem}.post-footer-navigation-link{color:var(--secondary-color)}.post-footer-navigation-link:hover{color:var(--link-color)}.bio-info{margin:0}.rc-scout__logo{display:inline-block;padding:0;border:0;margin:0 8px 0 0;width:.85em;height:.85em;background:no-repeat 50% url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2012%2015%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%2212%22%20height%3D%2210%22%20fill%3D%22%23000%22%3E%3C%2Frect%3E%3Crect%20x%3D%221%22%20y%3D%221%22%20width%3D%2210%22%20height%3D%228%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%222%22%20y%3D%222%22%20width%3D%228%22%20height%3D%226%22%20fill%3D%22%23000%22%3E%3C%2Frect%3E%3Crect%20x%3D%222%22%20y%3D%223%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%2361ae24%22%3E%3C%2Frect%3E%3Crect%20x%3D%224%22%20y%3D%223%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%2361ae24%22%3E%3C%2Frect%3E%3Crect%20x%3D%226%22%20y%3D%223%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%2361ae24%22%3E%3C%2Frect%3E%3Crect%20x%3D%223%22%20y%3D%225%22%20width%3D%222%22%20height%3D%221%22%20fill%3D%22%2361ae24%22%3E%3C%2Frect%3E%3Crect%20x%3D%226%22%20y%3D%225%22%20width%3D%222%22%20height%3D%221%22%20fill%3D%22%2361ae24%22%3E%3C%2Frect%3E%3Crect%20x%3D%224%22%20y%3D%229%22%20width%3D%224%22%20height%3D%223%22%20fill%3D%22%23000%22%3E%3C%2Frect%3E%3Crect%20x%3D%221%22%20y%3D%2211%22%20width%3D%2210%22%20height%3D%224%22%20fill%3D%22%23000%22%3E%3C%2Frect%3E%3Crect%20x%3D%220%22%20y%3D%2212%22%20width%3D%2212%22%20height%3D%223%22%20fill%3D%22%23000%22%3E%3C%2Frect%3E%3Crect%20x%3D%222%22%20y%3D%2213%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%223%22%20y%3D%2212%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%224%22%20y%3D%2213%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%225%22%20y%3D%2212%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%226%22%20y%3D%2213%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%227%22%20y%3D%2212%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%228%22%20y%3D%2213%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3Crect%20x%3D%229%22%20y%3D%2212%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22%23fff%22%3E%3C%2Frect%3E%3C%2Fsvg%3E)}.bio-link,.socialMediaLinks{box-shadow:none;color:var(--secondary-color)}.bio-link:hover{text-decoration:underline}.socialMediaLinks-icon{height:20px;width:20px;
4fill:var(--secondary-color);margin-right:1.5rem}.socialMediaLinks-icon:hover{-webkit-transform:scale(1.1);transform:scale(1.1);transition:-webkit-transform .3s linear;transition:transform .3s linear;transition:transform .3s linear,-webkit-transform .3s linear}.bio-socialMediaWrapper{margin:1.5rem 0}.talks-container{margin-bottom:3rem}.talks-title{color:var(--secondary-color);font-size:1.2rem;line-height:1.75;margin:.5rem 0}.talks-title:hover{text-decoration:underline}.talks-info{color:grey;font-family:Montserrat,sans-serif;font-size:.83255rem;margin-bottom:1rem}h2{margin:1.5rem 0}body{color:#352d39}a{box-shadow:none;color:#942874}code{background:rgba(0,0,0,.04);border-radius:.375rem;font-family:monospace,monospace;padding:.4em .5em;word-wrap:break-word}ol,ul{color:var(--primary-color);list-style-image:none;list-style-position:outside;margin:0 0 1.45rem 1.45rem}h4{font-size:18px;letter-spacing:0;text-transform:none}.articleLink{color:var(--secondary-color);text-decoration:underline}.articleLink:hover,.readMoreLink,.readMoreLink:hover,.topicsLink,.topicsLink:hover{color:var(--link-color)}.readMoreLink:hover,.topics{text-decoration:underline}.topics{border:1px solid var(--secondary-color);padding:5px 10px;margin-right:8px;color:var(--secondary-color);margin-bottom:8px}.topics:hover{background:var(--link-color);color:var(--card-background)}.topicsList{display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start}img{margin-left:auto;margin-right:auto;display:block}@media (max-width:768px){.aboutMe-container,.allPosts-container,.searchPosts-container{font-size:14px;padding:1.5rem 2rem}.bio-info{font-size:14px}.post-title{font-size:2rem;margin-top:2.5rem}}.embed-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%}.embed-container embed,.embed-container iframe,.embed-container object{position:absolute;top:0;left:0;width:100%;height:100%}blockquote{border-left:.3rem solid var(--link-color);margin-left:-.5rem;margin-right:1rem;font-size:16px;color:var(--primary-color)}mark{background:var(--third-color);padding:4px 6px}</style><meta name="generator" content="Gatsby 2.32.13"/><style data-styled="pOswd geTtlE" data-styled-version="4.4.1"> 5/* sc-component-id: layout__Wrapper-sc-kac1sv-0 */ 6.pOswd{min-height:100vh;} 7/* sc-component-id: layout__Footer-sc-kac1sv-1 */ 8.geTtlE{text-align:center;margin:24px;}</style><title data-react-helmet="true">ð§¶Â A philosophy of Software Design by John K. Ousterhout - Book Notes | Stefi Rosca</title><link data-react-helmet="true" rel="canonical" href="https://stefirosca.netlify.app/blog/a-philosophy-of-software-design/"/><meta data-react-helmet="true" name="description" content="Storygraph: A philosophy of Software Design â° What It's About "We must find ways to make software simpler.â This book explores software complexity and ways toâ¦"/><meta data-react-helmet="true" property="og:title" content="ð§¶Â A philosophy of Software Design by John K. Ousterhout - Book Notes"/><meta data-react-helmet="true" property="og:description" content="Storygraph: A philosophy of Software Design â° What It's About "We must find ways to make software simpler.â This book explores software complexity and ways toâ¦"/><meta data-react-helmet="true" property="og:type" content="website"/><meta data-react-helmet="true" name="twitter:card" content="summary"/><meta data-react-helmet="true" name="twitter:creator" content="Stefi Rosca"/><meta data-react-helmet="true" name="twitter:title" content="ð§¶Â A philosophy of Software Design by John K. Ousterhout - Book Notes"/><meta data-react-helmet="true" name="twitter:description" content="Storygraph: A philosophy of Software Design â° What It's About "We must find ways to make software simpler.â This book explores software complexity and ways toâ¦"/><meta data-react-helmet="true" property="og:image" content="content/assets/banner.jpg"/><link rel="alternate" type="application/rss+xml" href="/rss.xml"/><link rel="icon" href="/favicon-32x32.png?v=4e38b9f2435b97057662de0e397d6e26" type="image/png"/>
8<link rel="manifest" href="/manifest.webmanifest" crossorigin="anonymous"/><meta name="theme-color" content="#352D39"/><link rel="apple-touch-icon" sizes="48x48" href="/icons/icon-48x48.png?v=4e38b9f2435b97057662de0e397d6e26"/><link rel="apple-touch-icon" sizes="72x72" href="/icons/icon-72x72.png?v=4e38b9f2435b97057662de0e397d6e26"/><link rel="apple-touch-icon" sizes="96x96" href="/icons/icon-96x96.png?v=4e38b9f2435b97057662de0e397d6e26"/><link rel="apple-touch-icon" sizes="144x144" href="/icons/icon-144x144.png?v=4e38b9f2435b97057662de0e397d6e26"/><link rel="apple-touch-icon" sizes="192x192" href="/icons/icon-192x192.png?v=4e38b9f2435b97057662de0e397d6e26"/><link rel="apple-touch-icon" sizes="256x256" href="/icons/icon-256x256.png?v=4e38b9f2435b97057662de0e397d6e26"/><link rel="apple-touch-icon" sizes="384x384" href="/icons/icon-384x384.png?v=4e38b9f2435b97057662de0e397d6e26"/><link rel="apple-touch-icon" sizes="512x512" href="/icons/icon-512x512.png?v=4e38b9f2435b97057662de0e397d6e26"/><link as="script" rel="preload" href="/webpack-runtime-053015bafc208725b0f7.js"/><link as="script" rel="preload" href="/framework-9252bfa5ea71b588207d.js"/><link as="script" rel="preload" href="/532a2f07-0095ba809ea0a0dfc239.js"/><link as="script" rel="preload" href="/app-1cbb787fb209e50addf1.js"/><link as="script" rel="preload" href="/styles-407fe62976dc5310c43e.js"/><link as="script" rel="preload" href="/1ae1fd6d82780cebdc1de26a5dab78ae42df5bd6-fa5b13c1ce7b51f1cc65.js"/><link as="script" rel="preload" href="/component---src-templates-blog-post-js-124241257a89b5530cf4.js"/><link as="fetch" rel="preload" href="/page-data/blog/a-philosophy-of-software-design/page-data.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/sq/d/32046230.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/sq/d/3561240748.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/app-data.json" crossorigin="anonymous"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div class="layout__Wrapper-sc-kac1sv-0 pOswd"><div style="margin-left:auto;margin-right:auto;max-width:52.5rem;padding:1.75rem 1.3125rem"><header><h3 class="secondaryTitle"><a style="box-shadow:none;text-decoration:none;color:inherit" href="/blog/">Stefi Rosca</a></h3></header><main><h1 class="post-title">ð§¶Â A philosophy of Software Design by John K. Ousterhout - Book Notes</h1><p class="post-info">January 17, 2026 ⢠5 min read</p><span>Rating: ââââ</span><p>Storygraph:<a style="color:#942874;text-decoration:underline" target="_blank" href="https://app.thestorygraph.com/books/eaae1580-fa7e-4c67-a39d-bd9c76486e32">A philosophy of Software Design</a></p><h2>â° What Itâs About</h2><p>âWe must find ways to make software simpler.â This book explores software complexity and ways to reduce it.</p><h2>ð§ Thoughts</h2><p>I thought this book would be more philosophical, but instead it goes into concrete ideas and best practices for writing software. While it was a bit of a slow read at times, despite being short, much of the content resonated with me.</p><p>What I really liked was that the author openly disagrees with some ideas from Clean Code and backs those disagreements with clear, concrete arguments rather than opinions.</p><p>Another thing I appreciated is how the ideas were shared with examples. The book comes across as the authorâs genuine wish that we write <em>better, less complex software</em>, not just âcleverâ software.</p><p>What Iâve learned with experience is that, while we may know the theory, in the real world we often donât have full control or enough time to do things <em>by the book</em>.</p><p>I took a bunch of notes on comments in code, probably because I initially learned that these were a bad practice and later realized how useful well-written comments actually are. Seeing AI-generated code add unnecessary comments everywhere makes that difference much clearer.</p><p>Overall, this book reinforced something Iâve been slowly learning through experience: writing simple software isnât about cutting corners or writing less code, itâs about making deliberate design choices that reduce the mental effort required to understand, modify, and maintain the code for everyone who comes after you, including your future self.</p><br/><h2>âï¸ My Top 3 Quotes</h2><ul><li><p>âAll programming requires is a creative mind and the ability to organize your thoughts.â</p></li><li><p>âEvery rule has its exceptions, and every principle has its limits.â - true not just in software, but across many other fields as well.</p></li><li><p>ð°Â âConsistency reduces mistakes.â</p><br/></li></ul><h2>ð Raw highlights / notes</h2><h3>Chapter 1 - Introduction (Itâs all about complexity)</h3><p>âAs a software developer, you should always be on the lookout for opportunities to improve the design of the system you are working on.â</p><h3>Chapter 2 - The nature of complexity</h3><p>â<strong>Complexity is more apparent to readers than writers</strong>â â I notice this most with larger PRs. Code makes far more sense to the person who wrote it than to the person reviewing it. This part also makes me think of todayâs environment where we write a lot of code with AI. This makes us responsible for the code. It shouldnât get too complex, we have to read through it, review it and sign off on it.</p><blockquote><p>âYour job as a developer is not just to create code that you can work with easily, but to create code that others can also work with easily.â</p></blockquote><blockquote><p>âIf a software system is hard to understand and modify, then it is complicated; if it is easy to understand and modify, then itâs simpleâ</p></blockquote><p><strong>Symptoms of complexity</strong></p><ul><li>Simple changes require code modifications in many different places</li><li>Cognitive load: sometimes an approach that requires more lines of code is actually simpler</li><li>Unknown unknowns: when youâre unsure which parts of the code must change</li></ul><p>Complexity makes it difficult and risky to modify an existing code base.</p><h3>Chapter 3 - Working code isnât enough (Strategic vs tactical programming)</h3><p>The best engineers care deeply about good design. â not sure how much this holds, but curious to find out somehow.</p><p>
8If your codebase is a wreck, people will hear about it and might not want to join such a company making recruitment harder.</p><h3>Chapter 4 - Modules should be deep</h3><h3>Chapter 5 - Information hiding (and leakage)</h3><p>âWhen designing modules, focus on the knowledge thatâs needed to perform each task, not the order in which the tasks occurâ â shares a good example on this</p><p>âThe best features are the ones you get without even knowing they exist. â</p><h3>Chapter 6- General-purpose modules are deeper</h3><p><strong>Questions to ask yourself</strong> What is the simplest interface that will cover all my current needs?</p><p><span class="gatsby-resp-image-wrapper" style="position:relative;display:block;margin-left:auto;margin-right:auto;max-width:590px"> 9 <a class="gatsby-resp-image-link" href="/static/41ec78c9097fa7a07c8aae72a93826a5/67226/1000044008.jpg" style="display:block" target="_blank" rel="noopener"> 10 <span class="gatsby-resp-image-background-image" style="padding-bottom:133.1081081081081%;position:relative;bottom:0;left:0;background-image:url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDAQT/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAGrzYwsHM86lhg//8QAGBAAAwEBAAAAAAAAAAAAAAAAAAECEAP/2gAIAQEAAQUCEXy51TEPFiFn/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAGBAAAgMAAAAAAAAAAAAAAAAAARECEDD/2gAIAQEABj8CpmLOX//EABoQAAMBAAMAAAAAAAAAAAAAAAABMRARIUH/2gAIAQEAAT8hjHGBZnpW3PY5cXn/2gAMAwEAAgADAAAAENfwc//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8QH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8QH//EABwQAAICAwEBAAAAAAAAAAAAAAABESExQXEQUf/aAAgBAQABPxBxEklyhM24EExTdrosYzlCWr1ocg6VZgm/hh5aXD//2Q==');background-size:cover;display:block"></span> 11 <img class="gatsby-resp-image-image" alt="question to ask yourself (image from book)" title="question to ask yourself (image from book)" src="/static/41ec78c9097fa7a07c8aae72a93826a5/1c72d/1000044008.jpg" srcSet="/static/41ec78c9097fa7a07c8aae72a93826a5/a80bd/1000044008.jpg 148w,/static/41ec78c9097fa7a07c8aae72a93826a5/1c91a/1000044008.jpg 295w,/static/41ec78c9097fa7a07c8aae72a93826a5/1c72d/1000044008.jpg 590w,/static/41ec78c9097fa7a07c8aae72a93826a5/a8a14/1000044008.jpg 885w,/static/41ec78c9097fa7a07c8aae72a93826a5/fbd2c/1000044008.jpg 1180w,/static/41ec78c9097fa7a07c8aae72a93826a5/67226/1000044008.jpg 3072w" sizes="(max-width: 590px) 100vw, 590px" style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0" loading="lazy"/> 12 </a> 13 </span></p><h3>Chapter 7 - Different layer, different abstraction</h3><h3>Chapter 8 - Pull Complexity Downwards</h3><p>âItâs more important for a module to have a simple interface than a simple implementation.â</p><h3>Chapter 9 - Better together or better apart?</h3><p>If you find the same pattern of code repeated over and over, see if you can reorganize the code to eliminate the repetition.</p><p><strong>A different perspective to <em>Clean Code</em> book</strong></p><p>More functions means more interfaces to document and learn. If functions are made too small, they lose their independence, resulting in conjoined functions that must be read and understood together.</p><p>âFirst make functions deep, then try to make them short enough to be easily read. Donât sacrifice depth for length.</p><h3>Chapter 10 - Define errors out of existence</h3><p>Throwing exceptions is easy, handling them is hard. â if you have been paged during the night for some exception you might relate to this differently ð</p><h3>Chapter 11 - Design it twice</h3><p>Thinking of all possible ways something can be build helps a lot with writing good software and being aware of trade offs. When writing down a document to be shared with other engineers share possible solutions with pros and cons and then explain why you picked one of them instead of the others.</p><h3>Chapter 12 - Why write comments? The four excuses</h3><p>âThe idea behind comments is to capture information that was in the mind of the designer but couldnât be represented in the codeââ</p><p><strong>A different perspective to Clean Code book</strong> âcomments are, at best, a necessary evilâ</p><p>Early in my career, I avoided comments almost entirely because of what I read in Clean Code. I didnât understand why senior colleagues left comments in the code. Over time, I realized that well-written comments are actually very helpful.</p><h3>Chapter 13 - Comments should describe things that arenât obvious from the code</h3><p>âComments should describe things that arenât obvious from the code. Donât repeat the code with comments - something I see more and more with AI.</p><blockquote><p>Higher level comments are more difficult to write than lower level comments because you must think of the code in a different way. Ask yourself: What is this code trying to do? What is the simplest thing you can say that explains everything in the code? What is the most important thing about this code?</p></blockquote><ul><li>Why the code is executed.</li><li>How we get here - when such method gets invoked</li><li>Any tricky aspects that arenât obvious from the code</li></ul><p>âThe main goal of implementation comments is to help readers understand what the code is doing.â</p><p>If there are tricky aspects to the code that wonât be obvious from reading it, you should document them.</p><h3>Chapter 14 - Choosing names</h3><p><span class="gatsby-resp-image-wrapper" style="position:relative;display:block;margin-left:auto;margin-right:auto;max-width:590px"> 14 <a class="gatsby-resp-image-link" href="/static/f79e5615927d3bb8a015eb7a5a7e25fb/e8950/choosing-names.jpg.png" style="display:block" target="_blank" rel="noopener"> 15 <span class="gatsby-resp-image-background-image" style="padding-bottom:42.567567567567565%;position:relative;bottom:0;left:0;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACNUlEQVQozzWSV1NaARSE+ZUpForABa9U6YgIaESaMYA4SkCNIKAiLeIIsaRM4pgnf9GXw53Jw855+2Z3z+q8K1707/WY9WaWzXZc9hUCLi9+h5uId5WYz082mWD3wybVvV1O9kt06lVu2k0eBpf8uRvxPBnx+vMbk1YbnUf1oFpVDaaYFBSjBZdNJeD0EHR5SIYjbK+vk08lKWd3KGfSnB7s0z09Znj+hel1hx83PV7ux0w6HXT2JTuGOQMWgxm72YZqsWvuol6/uAuyHYuTS6WoFPIc75dpHh3Sa5xxc9HmYdjjeXrL34cJr7+eeOr30DltTqxGqyZFZBOXYY+feCBMKrImipKOb1DK5jgoFKiViuKwwsVJnVH7nPvBNY+jPi+PU54GA3Qum0vrz6xf0oBWiWwzWXFLl74Vl7h1aT1urcWkyyR76TSVfJ56Wbo8rjFsNcRti+mgK/G7EtlkY/7NnMTWs/h2AeO8HqvEdyrLeFUnq6J4IEQiFBanCT7t7GjQGbBZPaLfPGN8dcGtaNq/RqcYFQ22tGhi8d0CZrn/H+O0LmvAkNtLzB+ULrcoZrKUczlOJHa7XtP6HLVb4rLDXU8cWvQWDDKbWdQZ2CLRZ49xKCoeu0NgPpmPj41ghEwiRSmTE2CearFIq1ajK8B+s8Ft91KA4tChOGR7Tjyqm1WHl6A8JOoLsR6IymRiMpkkhc1tAeU5/CgPqRxy/rnO1VmDr5dXTIdDvo/H/J5MeX645x8hms/k83yS2AAAAABJRU5ErkJggg==');background-size:cover;display:block"></span> 16 <img class="gatsby-resp-image-image" alt="choosing names" title="choosing names" src="/static/f79e5615927d3bb8a015eb7a5a7e25fb/fcda8/choosing-names.jpg.png" srcSet="/static/f79e5615927d3bb8a015eb7a5a7e25fb/12f09/choosing-names.jpg.png 148w,/static/f79e5615927d3bb8a015eb7a5a7e25fb/e4a3f/choosing-names.jpg.png 295w,/static/f79e5615927d3bb8a015eb7a5a7e25fb/fcda8/choosing-names.jpg.png 590w,/static/f79e5615927d3bb8a015eb7a5a7e25fb/efc66/choosing-names.jpg.png 885w,/static/f79e5615927d3bb8a015eb7a5a7e25fb/c83ae/choosing-names.jpg.png 1180w,/static/f79e5615927d3bb8a015eb7a5a7e25fb/e8950/choosing-names.jpg.png 2000w" sizes="(max-width: 590px) 100v
16w, 590px" style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0" loading="lazy"/> 17 </a> 18 </span></p><p>Yep, I find naming variables in Go maybe too short and unusual and quite hard especially when not familiar with what some letters stand for. I guess that with experience this gets easier to understand. I also donât like loooooong names in JavaScript.</p><h3>Chapter 15 - Write the comments first</h3><h3>Chapter 16 - Modify existing code</h3><h3>Chapter 17 - Consistency</h3><p>ð°Â Consistency reduces mistakes.</p><h3>Chapter 18 - Code should be obvious</h3><h3>Chapter 19 - Software trends</h3><p>âOne of the risk of agile development is that it can lead to tactical programmingâ (Tactical programming is a short-term, speed-focused approach to software development) â I feel like this is a more of a it depends situations, sometimes speed is important to make it rather than build something perfect. I know itâs not ideal but business has to keep going we need money to continue building and growing a business.</p><p>â¤ï¸Â test, are great for refactoring â fully agree</p><p>âNot every problem can be solved cleanly with an existing design pattern: donât force a problem into a design pattern when a custom approach will be cleaner.â</p><h3>Chapter 20 - Designing for Performance</h3><p>ð§  Before making any changes, measure the systemâs existing behaviour.</p><blockquote><p>Making changes based on intuition, youâll waste time on things that donât actually improve performance and youâll probably make the system more complicated in the process.</p></blockquote><p>Complicated code tends to be slow because it does extraneous or redundant work.</p><blockquote><p>Performance isnât as important for special cases, so you can structure the special-case code for simplicity rather than performance.</p></blockquote><h3>Chapter 21 - Decide what matters</h3><style class="grvsc-styles"> 19 .grvsc-container { 20 overflow: auto; 21 -webkit-overflow-scrolling: touch; 22 padding-top: 1rem; 23 padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem)); 24 padding-bottom: 1rem; 25 padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem)); 26 border-radius: 8px; 27 border-radius: var(--grvsc-border-radius, 8px); 28 font-feature-settings: normal; 29 } 30 31 .grvsc-code { 32 display: inline-block; 33 min-width: 100%; 34 } 35 36 .grvsc-line { 37 display: inline-block; 38 box-sizing: border-box; 39 width: 100%; 40 padding-left: 1.5rem; 41 padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)); 42 padding-right: 1.5rem; 43 padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem)); 44 } 45 46 .grvsc-line-highlighted { 47 background-color: var(--grvsc-line-highlighted-background-color, transparent); 48 box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent); 49 } 50 51</style><h4>Read More:</h4><ul class="post-footer-navigation"><li><a class="post-footer-navigation-link" rel="prev" href="/blog/feel-good-productivity-ali-abdaal-notes/">â <!-- -->ð¥ï¸ Feel-Good Productivity: How to Do More of What Matters to You by Ali Abdaal - Book Notes</a></li><li></li></ul><hr style="margin-bottom:1.75rem"/><a href="/blog"><h2 class="post-footer-title">Stefi Rosca</h2></a><div><p class="bio-info"><span role="img" aria-label="developer emoji">ð©âð»</span> <!-- -->Frontend Developer,<!-- --> <span role="img" aria-label="world emoji">ð</span> <a class="bio-link" href="https://www.stefitravels.xyz/" aria-label="Stefi's Travel Blog" alt="Stefi's Travel Blog" target="_blank">traveler</a> <!-- -->and<span role="img" aria-label="skier emoji">â·ï¸</span> <!-- -->Skier</p><p class="bio-info"><i class="rc-scout__logo"></i><a class="bio-link" href="https://www.recurse.com/" aria-label="Recurse Center homepage" alt="Recurse Center homepage" target="_blank">Recurse Center</a> <!-- -->Alumn</p><p class="bio-socialMediaWrapper"><a class="socialMediaLinks" href="https://github.com/stefi23" aria-label="Here is a link towards my Github profile" alt="Github profile" target="_blank"><svg class="socialMediaLinks-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg></a><a class="socialMediaLinks" href="https://twitter.com/stefania_rosca" alt="Twitter profile" aria-label="Here is a link towards my Twitter profile" target="_blank"><svg class="socialMediaLinks-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"></path></svg></a><a class="socialMediaLinks" href="https://www.linkedin.com/in/stefaniarosca/" aria-label="Here is a link towards my Linkedin profile" alt="Linkedin profile" target="_blank"><svg class="socialMediaLinks-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a></p></div></main></div><footer class="layout__Footer-sc-kac1sv-1 geTtlE">Stefi Rosca © <!-- -->2026</footer></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;
51border:0" aria-live="assertive" aria-atomic="true"></div></div>
51<script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/blog/a-philosophy-of-software-design/";/*]]>*/</script>
51<script id="gatsby-chunk-mapping">/*<![CDATA[*/window.___chunkMapping={"polyfill":["/polyfill-da20a1db8321d70d55d6.js"],"app":["/app-1cbb787fb209e50addf1.js"],"component---cache-caches-gatsby-plugin-offline-app-shell-js":["/component---cache-caches-gatsby-plugin-offline-app-shell-js-ad6431e4664bcf916d19.js"],"component---src-pages-404-js":["/component---src-pages-404-js-b3de1c240d8e7208d612.js"],"component---src-pages-blog-js":["/component---src-pages-blog-js-2d88d792a1593612b2a2.js"],"component---src-pages-index-js":["/component---src-pages-index-js-5739557996443ecb173f.js"],"component---src-templates-blog-post-js":["/component---src-templates-blog-post-js-124241257a89b5530cf4.js"],"component---src-templates-tags-js":["/component---src-templates-tags-js-e5697ee2bbe4e2b7f3f3.js"]};/*]]>*/</script>
51<script src="/polyfill-da20a1db8321d70d55d6.js" nomodule=""></script>
51<script src="/component---src-templates-blog-post-js-124241257a89b5530cf4.js" async=""></script>
51<script src="/1ae1fd6d82780cebdc1de26a5dab78ae42df5bd6-fa5b13c1ce7b51f1cc65.js" async=""></script>
51<script src="/styles-407fe62976dc5310c43e.js" async=""></script>
51<script src="/app-1cbb787fb209e50addf1.js" async=""></script>
51<script src="/532a2f07-0095ba809ea0a0dfc239.js" async=""></script>
51<script src="/framework-9252bfa5ea71b588207d.js" async=""></script>
51<script src="/webpack-runtime-053015bafc208725b0f7.js" async=""></script>
51<script> 52 console.log('Hello friends!'); 53 </script>
53</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.