<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Joseph Eigenraam]]></title><description><![CDATA[ 💼 Senior Engineering Manager <br /> 🧑‍💻 Staff Software Engineer <br /><br /> I love talking about everything software development and also:<br /><br /> ⚔️ D&D, 📷 Photography, ✈️ Travel]]></description><link>https://josepheigenraam.com/</link><image><url>https://josepheigenraam.com/favicon.png</url><title>Joseph Eigenraam</title><link>https://josepheigenraam.com/</link></image><generator>Ghost 5.81</generator><lastBuildDate>Tue, 12 May 2026 21:31:24 GMT</lastBuildDate><atom:link href="https://josepheigenraam.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Open Development: Ghost Blog Theme]]></title><description><![CDATA[Follow along as I make this site theme re-usable and put it up for sale.]]></description><link>https://josepheigenraam.com/open-development-ghost-blog-theme/</link><guid isPermaLink="false">65f82490e3ca8a00ec346e2d</guid><category><![CDATA[Software Development]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Wed, 03 Apr 2024 06:49:37 GMT</pubDate><media:content url="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.48.12-pm.png" medium="image"/><content:encoded><![CDATA[<img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.48.12-pm.png" alt="Open Development: Ghost Blog Theme"><p>Like many software developers when I think about creating a side-hustle, or generating passive income, I often default to thinking about website contract work. </p><p>But how do you start building a client-base when the vast majority of your career has been spent building software behind closed doors? When your entire portfolio is locked behind NDA&apos;s or are parts of a much wider whole?</p><p>I honestly have no idea &#x1F937;&#x200D;&#x2642;&#xFE0F;</p><p>But I&apos;m hoping creating and selling themes for popular blog-engines is a start. A way to provide value, to build a public portfolio and hopefully attract opportunities for bigger work.</p><p>So this mini-series will document my journey creating the theme for this site - and how I&apos;ll go about making it usable for others. </p><h2 id="project-setup-developer-environment">Project setup + developer environment</h2><p>This site runs using the popular blog engine <a href="https://ghost.org/?ref=josepheigenraam.com">Ghost</a>. Their <a href="https://github.com/TryGhost/Starter?ref=josepheigenraam.com">ThemeStarter</a> does a great job introducing the basic concepts of a ghost theme and their robust <a href="https://ghost.org/docs/themes/?ref=josepheigenraam.com">official documentation</a> covers any missing gaps. </p><p>Throw in a brief guide from <a href="https://layeredcraft.com/?ref=josepheigenraam.com">LayeredCraft</a> on <a href="https://layeredcraft.com/blog/the-complete-guide-for-developing-ghost-themes-with-tailwindcss/?ref=josepheigenraam.com">how to setup TailwindCSS</a> and we have a basic development environment up and running in 15minutes. </p><h2 id="basic-design">Basic design </h2><p>Going into this I knew this site was going to be a weird mix of my all previous attempts; a personal portfolio, a resume, a software development blog, a place to talk about my hobbies and even display my photography. </p><p><em>My own little corner of the internet to represent my whole self.</em></p><p>With such an over-complicated mission-statement I wanted the design to be as minimalist as possible. To focus readers on the content and let the theme fade into the background. </p><p>That left me with a few core requirements:</p><ul><li>As a portfolio - I wanted a two-panel layout on the home page to showcase both the site-content and who I as an individual</li><li>As a software-development blog - I wanted posts to be able to support long-form articles with complicated nested headings</li><li>As a hobby-blog - I wanted the theme to not feel too corporate or overpowering, as a lot of my writing won&apos;t be formal</li><li>As a resume - it should be &apos;professional-enough&apos; that I wouldn&apos;t feel awkward showing colleagues, clients or employers </li><li>As a place to showcase my photography - I needed few (or no!) colours that would skew how photos were perceived.</li></ul><p>Those requirements ultimately resulted in the minimalist card-based layout you see now. </p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.33.50-pm.png" width="2880" height="1582" loading="lazy" alt="Open Development: Ghost Blog Theme"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.34.06-pm.png" width="1878" height="1580" loading="lazy" alt="Open Development: Ghost Blog Theme"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.34.56-pm.png" width="2880" height="1584" loading="lazy" alt="Open Development: Ghost Blog Theme"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.34.49-pm.png" width="2880" height="1588" loading="lazy" alt="Open Development: Ghost Blog Theme"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.37.57-pm.png" width="2874" height="1584" loading="lazy" alt="Open Development: Ghost Blog Theme"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.36.41-pm.png" width="2270" height="1072" loading="lazy" alt="Open Development: Ghost Blog Theme"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/Screenshot-2024-04-03-at-3.38.39-pm.png" width="1366" height="1156" loading="lazy" alt="Open Development: Ghost Blog Theme"></div></div></div></figure><ul><li>a) minimalist design without overbearing colours or typography</li><li>b) two column layout on the home page that makes it clear this is a portfolio</li><li>c) one-to-two column layout on posts to support both professional and casual content </li><li>d) &apos;tag&apos; pages to offer views for the different kinds of content</li><li>e) photo gallery support </li></ul><h2 id="next-steps">Next steps?</h2><p>With the basic design up and running it&apos;s time to focus on making it usable by other people - a genuine &apos;MVP&apos;. </p><p>After doing a little research on what Ghost themes have in common on <a href="https://themeforest.net/category/blogging/ghost-themes?ref=josepheigenraam.com">Themeforest</a> I put together this short-list of <em>must haves</em>:</p><ul><li>Responsive / Mobile Friendly</li><li>Light/Dark Mode</li><li>404 Page</li><li>Robust Recommendations / &apos;Read Next&apos; section</li><li>Optimised page load speed</li></ul><p>And to keep this fun for myself I&apos;ve added a few extra bells &amp; whistles:</p><ul><li>Customisable type-face options</li><li>Customisable &apos;read-next&apos; sections (bottom of page vs sidebar)</li></ul><p>Tune in next time as we make this theme ready for sale. </p>]]></content:encoded></item><item><title><![CDATA[Melbourne]]></title><description><![CDATA[<p></p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00264.jpg" width="1365" height="2048" loading="lazy" alt></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00245.jpg" width="2048" height="1365" loading="lazy" alt></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00222.jpg" width="1365" height="2048" loading="lazy" alt></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00410.jpg" width="2048" height="1365" loading="lazy" alt></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00235.jpg" width="2048" height="1365" loading="lazy" alt></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00113.jpg" width="1365" height="2048" loading="lazy" alt></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00187.jpg" width="2048" height="1365" loading="lazy" alt></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00032.jpg" width="2048" height="1365" loading="lazy" alt></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00103.jpg" width="2048" height="1365" loading="lazy" alt></div></div></div></figure>]]></description><link>https://josepheigenraam.com/melbourne/</link><guid isPermaLink="false">660a5c8f39c64c01309fa12e</guid><category><![CDATA[Photography]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Wed, 03 Apr 2024 05:51:48 GMT</pubDate><media:content url="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00410-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00410-1.jpg" alt="Melbourne"><p></p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00264.jpg" width="1365" height="2048" loading="lazy" alt="Melbourne"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00245.jpg" width="2048" height="1365" loading="lazy" alt="Melbourne"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00222.jpg" width="1365" height="2048" loading="lazy" alt="Melbourne"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00410.jpg" width="2048" height="1365" loading="lazy" alt="Melbourne"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00235.jpg" width="2048" height="1365" loading="lazy" alt="Melbourne"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00113.jpg" width="1365" height="2048" loading="lazy" alt="Melbourne"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00187.jpg" width="2048" height="1365" loading="lazy" alt="Melbourne"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00032.jpg" width="2048" height="1365" loading="lazy" alt="Melbourne"></div><div class="kg-gallery-image"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/04/DSC00103.jpg" width="2048" height="1365" loading="lazy" alt="Melbourne"></div></div></div></figure>]]></content:encoded></item><item><title><![CDATA[Inspired Character Sheets]]></title><description><![CDATA[A pen-and-paper character sheet builder. ]]></description><link>https://josepheigenraam.com/inspired-character-sheets/</link><guid isPermaLink="false">65f637ffe3ca8a00ec346e1a</guid><category><![CDATA[Project]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Sun, 17 Mar 2024 00:24:46 GMT</pubDate><media:content url="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/03/Screenshot-2024-03-16-at-2.24.44-pm-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/03/Screenshot-2024-03-16-at-2.24.44-pm-1.png" alt="Inspired Character Sheets"><p>Introducing - <a href="https://inspiredcharactersheets.com/?ref=josepheigenraam.com">inspiredcharactersheets.com</a>. A relatively simple character sheet builder that;</p><ul><li>Helps players create custom character sheets from a set of common components and designs</li><li>Auto-saves character info entered into the sheet so you can use it at the table</li><li>Prefer the tangible feel of paper and pencil? Print your sheet straight from the browser</li></ul><p>Or at least - that&apos;s the plan. I have most of the core sheet functionality operational and will be working on the designable components next. </p><p>Follow along as I finish building the application and build an active user-base. </p><h2 id="roadmap">Roadmap</h2><ul><li>Basic auth [Done]</li><li>Rudimentary pre-designed character sheet using common components [Done]</li><li>Auto-save functionality so sheets can be used during gameplay [Done]</li><li>Printable character sheets straight from the browser [Done]</li><li>Sheet components can be added, remove and re-arranged [In Progress]</li><li>Sheet components come with a variety of customisable styles (borders, colours, font etc) [To Do]</li><li>Share a read-only version of your sheet with your DM and other players [To Do]</li></ul>]]></content:encoded></item><item><title><![CDATA[Open Development: inspired character sheets]]></title><description><![CDATA[Follow along as I build a simple pen-and-paper character sheet builder. ]]></description><link>https://josepheigenraam.com/open-development-inspiredcharactersheets/</link><guid isPermaLink="false">65ec05a9e3ca8a00ec346d6f</guid><category><![CDATA[Software Development]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Sun, 17 Mar 2024 00:21:51 GMT</pubDate><media:content url="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/03/Screenshot-2024-03-16-at-2.24.44-pm.png" medium="image"/><content:encoded><![CDATA[<img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/03/Screenshot-2024-03-16-at-2.24.44-pm.png" alt="Open Development: inspired character sheets"><p>Creating a new character is one of my favourite parts of playing D&amp;D. It&apos;s a fresh start, an opportunity to try something new, a time of limitless possibilities. </p><p>Except my actual character sheet always looks the same. </p><p>Why doesn&apos;t my elven sorcerer feel different to my halfling barbarian? Why do spell slots take up so much space when my warlock will never learn that many spells? Sure, I could design a custom sheet for each character, but who has the time (or talent) for that? </p><p>Introducing - <a href="https://inspiredcharactersheets.com/?ref=josepheigenraam.com">inspiredcharactersheets.com</a>. A relatively simple character sheet builder that;</p><ul><li>Helps players create custom character sheets from a set of common components and designs</li><li>Auto-saves character info entered into the sheet so you can use it at the table</li><li>Prefer the tangible feel of paper and pencil? Print your sheet straight from the browser</li></ul><p>Or at least - that&apos;s the plan. I have most of the core sheet functionality operational and will be working on the designable components next. </p><p>Follow along as I finish building the application and build an active user-base. </p><h2 id="roadmap">Roadmap</h2><ul><li>Basic auth [Done]</li><li>Rudimentary pre-designed character sheet using common components [Done]</li><li>Auto-save functionality so sheets can be used during gameplay [Done]</li><li>Printable character sheets straight from the browser [Done]</li><li>Sheet components can be added, remove and re-arranged [In Progress]</li><li>Sheet components come with a variety of customisable styles (borders, colours, font etc) [To Do]</li><li>Share a read-only version of your sheet with your DM and other players [To Do]</li></ul>]]></content:encoded></item><item><title><![CDATA[Setting Idea: Shattered Magic]]></title><description><![CDATA[Whether it be the lure of ancient magic, the possibility of making a fortune, or the excitement of a new adventure, you are one of the desperate few who have signed on to an expedition to the Lost Continent of Ellos. ]]></description><link>https://josepheigenraam.com/setting-idea-shattered-magic/</link><guid isPermaLink="false">65ebe89de3ca8a00ec346d58</guid><category><![CDATA[RPG]]></category><category><![CDATA[Settings]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Sun, 01 Oct 2023 04:43:00 GMT</pubDate><media:content url="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/03/castle_by_hunternif_ddd573o-fullview--2-.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2024/03/castle_by_hunternif_ddd573o-fullview--2-.jpg" alt="Setting Idea: Shattered Magic"><p><em>Legends of the last age speak of awe-inspiring Magic and Ancient Wizards who shaped the world as they willed. History has long-forgotten the cause of the Cataclysm that shattered magic, but whether by some arcane experiment gone wrong or the jealousy of the Gods, the magic of old is no more and we are left with nought but splinters.</em></p><p><em>With their powers gone the old empires fell, and with each splinter of magic recovered, a new kingdom rose to take their place.</em></p><p><em>In recent months the minor Ashwood Mercantile Company rediscovered the Lost Continent of Ellos. Once the seat of power for an ancient Magocracy it is now little more than monster-infested ruins and barrow fields. The Ashwood Company is funding an expedition to Ellos in hopes of scavenging some piece of Lost Magic and raising itself into prominence.</em></p><p><em>Whether it be the lure of ancient magic, the possibility of making a fortune, or the excitement of a new adventure, you are one of the desperate few who have signed on.</em></p><p><em>You board your ship and begin the months-long journey to Ellos.</em></p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://s3.amazonaws.com/iw-blog-s3-s3bucket-1xepef5rp6mp1/2020/10/astrarium___coastal_region_by_arannihk_dd79zyn-pre.jpg" class="kg-image" alt="Setting Idea: Shattered Magic" loading="lazy" width="1192" height="670"></figure><p>Shattered Magic is a high-fantasy setting designed for the <a href="https://www.fantasyflightgames.com/en/products/genesys/?ref=josepheigenraam.com">Genesys Roleplaying System</a>.</p><p>Creating this setting was motivated by my desire to experiment with a sandbox style game, where the players are free to dictate the course of the adventure and where every action could have dramatic scenario-changing consequences.</p><p>The core idea of the setting comes from the idea of playing with a hard-magic system that breaks up the stereotypical &apos;Arcane&apos; magic into smaller more thematic components. The magic systems initially available to the player characters is only a fraction of what they will eventually encounter.</p><h2 id="concept">Concept</h2><p>The players are mercenaries who have signed up with a mercantile company that is seeking to plunder a recently rediscovered land.</p><p>The Lost Continent of Ellos is full of strange and wonderful magic that harkens back to the last age, as well as terrifying monstrosities that are the result of ancient magical experiments.</p><p>High-fantasy exploration with strange magic and lethal encounters. With a slice of settlement building between adventures to encourage players to focus on more than just killing monsters.</p><h2 id="aim">Aim</h2><p>Protect the company&apos;s outpost, scout the surrounding countryside, and scavenge ancient ruins and tombs for Lost Magic.</p><p>Build up yourselves and the outpost and then explore further afield.</p><h2 id="tone">Tone</h2><p>Action/Adventure, Fantasy Pulp, Mystery</p><h2 id="themes">Themes</h2><p>Brave adventurers exploring a strange land. Weird and ancient magic twisting the surrounding environment and creatures. A fledgeling town on the absolute border of the wilderness struggling to survive.</p><h2 id="major-factions">Major Factions</h2><p><em><strong>The Ashwood Mercantile Company</strong> </em>is a small-time shipping company that survives by delivering goods to hard to reach locations. Rumours have reached your ears that their shipments often miraculously avoid the usual bandits and riffraff.</p><p>You aren&apos;t quite sure how they found Ellos, but you are certain they intend to milk it for every piece of gold they can.</p><h2 id="major-locations">Major Locations</h2><p><strong><em>The First Outpost </em></strong>is a short journey inwards from where the Ashwood Company first made landfall. It serves as your home away from home and is currently the only safe location on Ellos.</p><p>It&apos;s little more than a lakeside inn, freshly named the Hunter&apos;s Alehouse, with a freshly planted garden. It will do until you have the chance to build something greater.</p><h2 id="major-personalities">Major Personalities:</h2><p><strong><em>The Bursar</em> </strong><em>Fendrel Wheatflow </em>is your point of contact when you land at Ellos. Don&apos;t let his aged stature and balding head fool you, Fendrel is an experienced merchant and skilled administrator. He is in charge of the First Outpost and responsible for seeing it survive the year.</p><p><em><strong>The Quartermaster, </strong>Gavin Hawe, </em>is an enthusiastic young halfling who joined the expedition hoping to strike it rich. His curly auburn hair makes him easy to spot inside the Hunter&apos;s Alehouse as he ensures everyone is fed and watered, all whilst peddling his own wares.</p><p>Little is known about <strong>The Noble </strong>behind the Ashwood mercantile company and the expedition. You know they are based in the ancient City of Silver, and you can guess they have some skill in magic to find Ellos. You are thankful they aren&apos;t coming with you, better to keep the nobles and their games as far away from honest folk as possible.</p><h2 id="major-species-types">Major Species Types:</h2><p><em><strong>Humans </strong></em>can be found in every known corner of the world, but have made their home in the <em>Republic of Ondoriel</em>. Once a collection of loose city-states connected by a maze of rivers and channels, the invention and proliferation of Hydromancy allowed the states to merge into the Republic.</p><p>The so-called demon-blooded <em><strong>Halea, </strong></em>from the <em>Deserts of Heru,</em> are a colourful and hardy bunch. They dress in bright robes dyed with clay taken from the enormous Sandworms that share their home. It was from these Sandworms that the Tribes of Heru rediscovered Geomancy and they have used it since to tame their dangerous home.</p><p>The <em><strong>Elves</strong> </em>of the<em> Unseen Forests </em>are as mysterious as the wildlife that make up their home. Few outsiders are ever granted entry and they guard their borders jealously with tamed monstrous creatures brought into reality by their unique <em>Summoning</em> magic.</p><p>They say never get between a <em><strong>Halfling</strong></em> and their coin-purse, and this is never more true in the <em>City of Silver</em>. A bustling metropolis of nobles, merchants and scoundrels it is often considered the heart of commerce between the many races of the world. It was here, in an attempt to recover the magic of old, that <em>Rune Magic</em> was discovered.</p><p><strong><em>Half-Elves </em></strong>call no single place home and instead are driven by their nature to journey from place-to-place in small troupes. Many believe it is this flighty nature that allowed these nomads to so easily intent Aeromancy.</p><p>The <em><strong>Dwarves </strong></em>of <em>Nom Montrim </em>are widely considered the best artisans and smiths to be found. It was the near-eruption of the volcano at the centre of the Montrim mountain range that forced them to re-invent Pyromancy, and they have used it ever-since to advance their craft far beyond the other nations.</p><h2 id="next-up">Next Up</h2><p>I intend to explore this setting in a series of articles that provide a mixture of setting detail and useful game mechanics. Next up will be a in-depth exploration of the races and careers available in Shattered Magic.</p>]]></content:encoded></item><item><title><![CDATA[Don't be afraid to revisit things you think you know]]></title><description><![CDATA[You never know when you might learn something amazing you missed the first time.]]></description><link>https://josepheigenraam.com/dont-be-afraid-revisit/</link><guid isPermaLink="false">64d2c2858468e400edea342f</guid><category><![CDATA[Personal Development]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Wed, 09 Aug 2023 10:19:06 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1506880018603-83d5b814b5a6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxib29rfGVufDB8fHx8MTcwOTQzOTM3Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1506880018603-83d5b814b5a6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxib29rfGVufDB8fHx8MTcwOTQzOTM3Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Don&apos;t be afraid to revisit things you think you know"><p>I&apos;ve spent a lot of my adult life resonating with the idea of being a &apos;life-long learner&apos; without actually putting anything into practice. </p><p>Whilst growing up I loved the process of learning. It was addicting, entertaining, and productive all at once.</p><p>But somewhere between finishing university, and diving straight into my first experience with professional burnout, I lost that joy. I still identified as a &apos;life-long learner&apos; but I had stopped learning. </p><p>Fast forward a few years, and a whole heap of experience both good and bad,  I suddenly found myself a member of a work bookclub reading through &apos;Atomic Habits&apos; by James Clear. I loved the book, its lessons resonated with me, but again I didn&apos;t change my behaviour. </p><p>Years later I found myself trying to kick-start a regular gym habit, and whilst looking for something to drown out the physical effort, I stumbled across the Atomic Habits audiobook. I figured I would give it another shot but probably quickly default back to Spotify.</p><p>Except this time something was different. </p><p>The book didn&apos;t just resonate. It stayed with me throughout that workout, the next, and even the one after that. Its core idea - <em>&quot;<strong>every action you take is a vote for the person you wish to become</strong>&quot; -</em> sunk in more than it had before. </p><p>I went beyond just <em>listening</em> and started practising. If I wanted to be a &apos;life-long learner&apos; I had to <em>learn my whole life. </em>Or more accurately - I had to learn every day. </p><p>If I wanted to be a &apos;gym rat&apos;, a writer, or anything else in the future, all I had to do was<em> </em>start voting for that identity with small daily actions. And through those actions author my own identity. </p><p>I had read those same words before but walked away without any genuine understanding. It was only upon re-reading them years later, as a different and (hopefully) wiser person, that they finally stuck with me. </p><p>So don&apos;t be afraid to revisit things you think you know. You never know when you might learn something amazing you missed the first time. </p>]]></content:encoded></item><item><title><![CDATA[Planning Projects by Requesting Feedback]]></title><description><![CDATA[Preparing even a simple project plan before starting development can help minimise mistakes.]]></description><link>https://josepheigenraam.com/planning-projects-by-requesting-feedback/</link><guid isPermaLink="false">640fc5ba66d9b402095f3bcd</guid><category><![CDATA[Software Development]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Thu, 04 May 2023 10:14:54 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1573868396123-ef72a7f7b94f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDh8fHBsYW58ZW58MHx8fHwxNjgzMTcyMzIw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1573868396123-ef72a7f7b94f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDh8fHBsYW58ZW58MHx8fHwxNjgzMTcyMzIw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Planning Projects by Requesting Feedback"><p>Throughout our careers as software engineers, it&apos;s tempting to jump straight to coding when starting a new project. This works fine when projects are small and uncomplicated, but as complexity increases we quickly find ourselves forgetting details and making mistakes. </p><p>Preparing even a simple project plan before starting development can help minimise these mistakes and ultimately save you and your team a lot of time. </p><p>These project plans don&apos;t just help you keep the technical details straight, they provide enormous value by:</p><ul><li>engaging your stakeholders and ensuring they understand why this work is important</li><li>holding you accountable to resolving concrete real-world problems (and not just delivering software without purpose)</li><li>providing a way to discuss the project with other engineering teams</li><li>benefit and learn from others&apos; experience</li></ul><p>As a general rule of thumb - any time your work is &quot;architecturally significant&quot; it&apos;s worth preparing a concrete plan <em>before </em>you start active development. </p><p>Imagine a basic service architecture diagram and ask yourself; <em><strong>&quot;will this project change any of the lines on this diagram?&quot;</strong></em> If the answer is yes, then you need a plan.</p><h2 id="how-to-plan">How to Plan</h2><p>Resist the temptation to try and plan your entire project upfront. Instead build up your plan steadily through talking with your stakeholders, your team and any other impacted teams.</p><p>The process outlined below is a rough guide on how I typically build up a project plan over time:</p><ol><li><strong>Start by describing the problem.</strong> Before you even begin thinking about possible solutions make sure you can clearly articulate what problem it is you are trying to solve.<br><br>Validate this problem statement with your stakeholders before moving into solution territory. If you can&apos;t agree on what problem you are trying to solve - then it doesn&apos;t matter what you build as it won&apos;t actually resolve your users pain. <br></li><li><strong>Brainstorm</strong><em><strong> 2-3 </strong></em><strong>solutions</strong> with your team and jot them down in rough dot-points. These should be super high-level descriptions and not dive too far into the detail on any individual solution. <br></li><li><strong>Seek feedback on your solution ideas<em>.</em></strong> This step is absolutely crucial and is really tempting to skip over. Before you spend huge amounts of time trying to write a perfect document spend some time sharing your ideas with anyone directly impacted by your project. <br><br>This might mean another team that maintains a service you will integrate with. Or potentially a Lead/Principal Engineer in your domain. If your company has a Solutions Architect make use of them!<br><br>The more people you get to challenge your ideas the stronger they will become. Throughout this process, you will find yourself coming to a firm decision on which solution works best.<br></li><li><strong>Fill in the Details.<em> </em></strong>Now that you have a reasonably concrete direction start filling in all the details on what you need to do. Stay reasonably high level and spend most of your time focused on the portions of your project which are the least well-understood or riskiest. <br><br>You may choose to simultaneously perform &apos;tech spikes&apos; to help you investigate specific technologies/problems that your team has not encountered before. <br><br>You should continue to engage with your team and stakeholders as you go about developing this detail. <br></li><li><strong>Seek Feedback again. </strong>At this point, you should have a solid project plan with a well-understood problem and a clearly defined solution. Validate the project plan as a whole with your stakeholders and any other interested parties.<br><br>Proactively ask for feedback on the portions of the plan where you are the least confident. <br></li><li><strong>Get Started!</strong></li></ol><p><strong>A few useful tips to keep in mind as you go about following the process above:</strong></p><ul><li>Share early and share often! The more feedback you get the better your plan is going to be. </li><li>Don&apos;t polish your plan too early! Keep the document as rough dot points for as long as possible. Ask your peers to focus on reviewing content and not grammar/sentence structure. </li><li>Adjust the complexity of your plan based on the complexity of your problem and solution.</li><li>Don&apos;t over-plan specifics. If you find yourself talking about class relationships or database table structures you are probably being too specific.</li><li>Diagrams diagrams diagrams. A simple service dependency diagram can save you 1,000 words trying to describe the same thing. </li></ul><p>Most importantly:</p><ul><li><strong>Don&apos;t hide in a corner for weeks preparing a perfectly polished document. That just makes it hard to accept feedback. </strong></li></ul><h2 id="plan-format">Plan Format</h2><p>The structure below is the format I use for almost all of my projects. You can find a standalone version of this as a Notion template <strong><a href="https://josepheigenraam.notion.site/Request-for-Comment-RFC-d7fd8f4f3c624b74a088290cb60bda9d?ref=josepheigenraam.com">here</a></strong>.</p><blockquote>Projects don&apos;t always need all sections. Feel empowered to remove headings (or add new ones) if they aren&apos;t appropriate for your project. </blockquote><h3 id="problem">Problem</h3><p>What problem or circumstance necessitates this project? Articulate the <em><strong>problem </strong></em>you are trying to solve, not the solution.</p><p>The less you talk about software, the more you talk about your end-users, the closer you are to understanding the real underlying issue. </p><p>You might also find it useful to include the following:</p><ul><li><strong>Success Criteria:</strong> A list of measurable outcomes you can use to ensure you have successfully solved the problem.</li><li><strong>DACI (Driver/Approver/Contributor/Informed):</strong> A short list of people who care about the project and need to be involved. </li></ul><h3 id="proposal">Proposal</h3><p>The core of the project plan and where most of the detail will reside. Whilst in brainstorming mode this is where you should dot-point out your initial solution ideas. </p><h3 id="proposaloverview">Proposal - Overview</h3><p>Briefly outline your preferred solution in broad detail. This should be a very high-level description of what the solution will involve.</p><p>Include a service-architecture diagram that shows what the architecture will look like once the project is complete. If your architecture is complicated it can also be useful to include a &apos;before&apos; diagram as well.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2023/04/AD87A070-051C-4EE9-BF1B-3B50E517D9F6.jpeg" class="kg-image" alt="Planning Projects by Requesting Feedback" loading="lazy" width="1095" height="795"><figcaption>Example service architecture diagram</figcaption></figure><h3 id="proposalcustom-headings">Proposal - Custom Headings</h3><p>Depending on the project this is the part that is likely to vary the widest. Any part of your project that is particularly complicated, risky, or involves new technology likely deserves its own section.</p><p>Essentially - any part of your overview that is likely to get lots of questions should get expanded in one of these.</p><p>Here are a few common examples that would likely deserve their own section:</p><ul><li>We will be integrating with an external API</li><li>Why we need this specific new database technology</li><li>How we will migrate data from Service X to Service Z</li><li>How we will safely deploy this without downtime</li><li>We are using a brand-new caching strategy</li></ul><p>If your project has relatively clear &apos;phases&apos; that need to be done in sequence you might choose to use this section to define explicit project milestones. </p><h3 id="proposalinfrastructure">Proposal - Infrastructure</h3><p>Outline any infrastructure you need to deploy or modify. This isn&#x2019;t about providing exhaustive detail - it&#x2019;s about ensuring you have thought about the impact of your change.</p><p>Will your project change traffic patterns? Does the reliability of preexisting infrastructure meet your needs? What about performance?</p><h3 id="proposalimpacted-services">Proposal - Impacted Services</h3><p>Describe any impact you are going to have on nearby services (or teams). Will you need to integrate with other services (internal or external)? Will this project require work from other teams?</p><h3 id="cost">Cost</h3><p>Estimate any additional costs that this project may incur. In particular, consider the cost of any new infrastructure or changes to traffic patterns.</p><h2 id="wrap-up">Wrap up</h2><p>And that&apos;s pretty much it. Remember - the point of a project document like this isn&apos;t to write some perfect project plan that captures all possible scenarios. </p><p>It&apos;s about helping you engage with your stakeholders, collaborating with other engineers to define a broad solution structure, and identifying the genuinely hard parts of your project. </p><p>Check out this <strong><a href="https://josepheigenraam.notion.site/Request-for-Comment-RFC-d7fd8f4f3c624b74a088290cb60bda9d?ref=josepheigenraam.com">notion template</a></strong> for a standalone version of the format above. </p>]]></content:encoded></item><item><title><![CDATA[Introduction]]></title><description><![CDATA[I started this blog without a clear goal in mind - I just knew I wanted to write. ]]></description><link>https://josepheigenraam.com/introduction/</link><guid isPermaLink="false">640fc08766d9b402095f3b6c</guid><category><![CDATA[Personal Development]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Tue, 14 Mar 2023 00:48:53 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1473181488821-2d23949a045a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI3fHxqb3VybmFsJTIwY29mZmVlfGVufDB8fHx8MTY3ODc1NTA4Mg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1473181488821-2d23949a045a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI3fHxqb3VybmFsJTIwY29mZmVlfGVufDB8fHx8MTY3ODc1NTA4Mg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Introduction"><p>I thought it was initially going to be about infrastructure but that topic never held my interest long enough to make it worthwhile. </p><p>More recently I&apos;ve been focused on what it means to be a minimalist - and what lessons we can learn from minimalism in our work lives. Going beyond that, I think I have found what I want to share. </p><p>Throughout our careers as engineers, we encounter the same problems over and over again. From small technical issues like broken pipelines, misconfigured CORs or poorly optimised DB queries. To the bigger problems like dealing with mountains of legacy services and rushed architectural thinking. </p><p>Even the really hard people and organisational problems tend to repeat. How do you motivate a team? How do you rebuild psychological safety after it&apos;s been destroyed? How do you articulate your strategy so business stakeholders don&apos;t just understand it but genuinely believe in it? </p><p>So that&apos;s what I want to talk about. All of the problems (big and small) I&apos;ve encountered over my career, how I solved them, how I failed to solve them, and what I learnt along the way. </p><p>To remind myself. And to hopefully help you along your way. </p>]]></content:encoded></item><item><title><![CDATA[Inspired Battlemaps]]></title><description><![CDATA[A community for finding and sharing RPG battlemaps]]></description><link>https://josepheigenraam.com/inspiredbattlemaps-com/</link><guid isPermaLink="false">631c245994fb440203ba559f</guid><category><![CDATA[Project]]></category><dc:creator><![CDATA[Joseph Eigenraam]]></dc:creator><pubDate>Sun, 30 Jan 2022 01:46:29 GMT</pubDate><media:content url="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2022/09/iwhome-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2022/09/iwhome-1.png" alt="Inspired Battlemaps"><p>When running games I am a huge fan of using maps. Even with games that aren&apos;t reliant on grid-based combat I find a map helps set the scene and ground the players in the world.</p><p>This works great if I am well prepared, but when players go off the rails I&apos;m often left scrambling trying to pull together an encounter with nothing but a digital whiteboard.</p><p><a href="https://inspiredbattlemaps.com/?ref=josepheigenraam.com">InspiredBattlemaps.com</a> is be my answer going forward.</p><p>It allows anyone to upload and share maps they have created, and provides an easy search experience for frantic GMs trying to find the perfect map mid-game.</p><figure class="kg-card kg-image-card"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2022/09/Screen-Shot-2022-09-11-at-5.00.01-pm.png" class="kg-image" alt="Inspired Battlemaps" loading="lazy"></figure><p>To get things started I have been commissioning maps from artists and I&apos;ll be continuing that over the next few months. I hope to establish a community around the site where fellow game-masters and artists can share their latest projects.</p><p>If you have some maps you want to share please register and try it out!</p><figure class="kg-card kg-image-card"><img src="https://s3.amazonaws.com/blogs-asset-bucket-s3bucket-173z8mganuzoh/2022/09/Screen-Shot-2022-09-11-at-5.04.23-pm.png" class="kg-image" alt="Inspired Battlemaps" loading="lazy"></figure>]]></content:encoded></item></channel></rss>