<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[RM-RF]]></title><description><![CDATA[Dev War Stories from Inspiring Tech Leaders]]></description><link>https://www.rm-rf.io</link><image><url>https://substackcdn.com/image/fetch/$s_!KYiI!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9496007b-46f6-4cf6-9ca8-adb6bb037d83_120x120.png</url><title>RM-RF</title><link>https://www.rm-rf.io</link></image><generator>Substack</generator><lastBuildDate>Sat, 09 May 2026 11:33:07 GMT</lastBuildDate><atom:link href="https://www.rm-rf.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Thomas Vanderstraeten]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[rmrf@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[rmrf@substack.com]]></itunes:email><itunes:name><![CDATA[Thomas Vanderstraeten]]></itunes:name></itunes:owner><itunes:author><![CDATA[Thomas Vanderstraeten]]></itunes:author><googleplay:owner><![CDATA[rmrf@substack.com]]></googleplay:owner><googleplay:email><![CDATA[rmrf@substack.com]]></googleplay:email><googleplay:author><![CDATA[Thomas Vanderstraeten]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[RM-RF#6 Jonathan from Wooclap]]></title><description><![CDATA["Our first event completely saturated the venue wi-fi"]]></description><link>https://www.rm-rf.io/p/rm-rf6-jonathan-from-wooclap</link><guid isPermaLink="false">https://www.rm-rf.io/p/rm-rf6-jonathan-from-wooclap</guid><dc:creator><![CDATA[Thomas Vanderstraeten]]></dc:creator><pubDate>Tue, 11 Jan 2022 15:24:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vy6Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>&#128075;&nbsp;<em>Welcome to this issue of RM-RF, where you get to hear about crazy dev war stories from inspiring tech leaders.</em></p></blockquote><blockquote><p>This time I interviewed&nbsp;<strong>Jonathan Alzetta, CTO of&nbsp;Wooclap</strong>. Wooclap is a collaborative platform for classes, conferences and training sessions, used by 1M+ teachers and trainers worldwide. From the early university days to scaling-up, Jonathan had an eventful tech ride. Read on for exciting anecdotes!</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vy6Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vy6Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 424w, https://substackcdn.com/image/fetch/$s_!vy6Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 848w, https://substackcdn.com/image/fetch/$s_!vy6Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 1272w, https://substackcdn.com/image/fetch/$s_!vy6Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vy6Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png" width="1100" height="576" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:676810,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vy6Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 424w, https://substackcdn.com/image/fetch/$s_!vy6Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 848w, https://substackcdn.com/image/fetch/$s_!vy6Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 1272w, https://substackcdn.com/image/fetch/$s_!vy6Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71bd1ad0-a5d8-47b3-8856-39b5609be40f_1203x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128368;&nbsp;<em>For&nbsp;<strong>how long</strong>&nbsp;have you been working at Wooclap?</em></p><p>It&#8217;s a long story that started right after my cofounder and I graduated from &#201;cole Polytechnique in 2013. By then we were organising study sessions and catch-up lessons with junior undergrads - it was our first project in the education space and we got along well together (note: it&#8217;s also a suggestion from <a href="https://podcasts.apple.com/gb/podcast/the-biggest-lessons-from-building-hubspot-from-co/id1535886300?i=1000543715135">Hubspot CTO</a> that you should try small-scale/time-scoped ventures as junior cofounders to test your relationship &#127891;). </p><p>I had studied nuclear physics and also took interest in computer science. Turns out, the latter was easier to practice on my own than the former &#128517;. So I ended up taking a job as a developer. </p><p>With Seb, we then took part in <a href="https://startlab.be/">Start.LAB</a> and launched the first iteration of Wooclap to enable live polls in classrooms. The first app was called DYHAQ = Do You Have Any Questions? It took off a bit and morphed into a company that I joined full-time in 2015!</p><p>&#127945;&nbsp;<em>How big is your&nbsp;<strong>team</strong>&nbsp;today?</em></p><p>Today we&#8217;re a team of 60 people at Wooclap, with 21 people in the tech team, including data scientists, product managers and product designers. We&#8217;re loosely organised into squads:</p><ul><li><p>On the core product of Wooclap, the squad is self-supporting with a full-time PM and designer;</p></li><li><p>On growth, several team members of the business and tech teams assemble to tackle specific initiatives;</p></li><li><p>Data scientists either focus on pure data projects or get staffed on other squads depending on their needs.</p></li></ul><p>A bit over a year and a half ago, we were still only 20 in the whole company. Covid has drastically increased the share of distance learning and hence the need for our solution. This is especially relevant for teachers who lack direct feedback during their online courses. And with the progressive return to in-person classes, Wooclap still remains important for teachers to empower them to interact with their students. This gives us great business opportunities, along with tech scaling challenges.</p><p>&#128736;&nbsp;<em>Describe your&nbsp;<strong>tech stack</strong>&nbsp;in a nutshell?</em></p><p>We&#8217;ve got 2 products with similar stacks:</p><ul><li><p>Wooclap is our core product for interactive classes. It&#8217;s based on Node + Express with MongoDB and React with Styled Components. It&#8217;s a pure web app even though it&#8217;s often used on smartphones: we wanted to remove any friction that could occur from asking participants to install apps on their devices.</p></li><li><p>Wooflash is our more recent product for <a href="https://en.wikipedia.org/wiki/Spaced_repetition">spaced repetition</a> flash cards (note: Jonathan even taught himself Japanese characters using this method &#127884;!). It includes a bit of Apollo / GraphQL and uses Postgres instead of MongoDB.</p></li></ul><p>Both products run on AWS infra. Our data stack leverages R, Shiny and a bit of Python.</p><p>&#128027; <em>What is the most <strong>elusive bug</strong> you and your team ever had to fix?</em></p><p>We&#8217;ve got 2 of them which are still out in the wild because they&#8217;re hard to catch and repro - they're pretty uncommon &#128121;.</p><ul><li><p>Wooclap includes ordering logic to sequence questions and events in the app through drag-and-drop. We sometimes run into duplicate indices which screw up the ordering, due to race conditions we still haven&#8217;t completely figured out (note: if you ever built an app with kanban-like behaviour, you probably came across that problem too - <a href="https://begriffs.com/posts/2018-03-20-user-defined-order.html">this excellent article</a> goes in great depth about handling user-defined ordering in your data model).</p></li><li><p>And then we&#8217;ve got the Microsoft black box problem with our PowerPoint integration used by teachers (to embed our poll results). The inner workings of PPT are so unpredictable across versions - a real debugging nightmare. This sometimes leads to our charts not being displayed due to sizing issues, or presenter view and audience view being inverted due to a bug in PowerPoint itself &#129327;.</p></li></ul><p>Fortunately both of these situations are well contained even if they episodically pop up anew.</p><p>&#128561;&nbsp;<em>What is the most&nbsp;<strong>stressful tech situation</strong>&nbsp;you ever faced?</em></p><p>This was around 6 years ago, in the early days of Wooclap when we used to be on-site to provide our services during conferences and other events. </p><p>We managed to sell to the organisers of a conference with 1,000 attendees - a number of concurrent users we&#8217;d never faced before. Already in the prep phase for the event, we got very custom feature requests that we had to implement in a rush. We nevertheless managed to land these in time. What happened however is that during the event, the speaker messed up the script and gave the wrong Wooclap instructions to attendees. This led them to all use the &#8220;take a selfie&#8221; feature at once, which completely crippled the wi-fi bandwidth of the venue. The connection hung out for 5 minutes till the organisers managed to phone their internet provider and temporarily boost bandwidth. This is something we&#8217;d never expected in our preparatory drills. Fortunately, the rest of the event went along smoothly.</p><p>Another related horror story happened when we ran a &#8220;competition-mode event&#8221; on Wooclap which had participants race to submit their responses first, with live scores displayed. It turned out to be a big initial mess with race conditions all around and inconsistent scoring displayed to all &#129325;. This led us to drastically improve our real-time handling capabilities to reach sub-10ms latencies. We found out for example that socket.io doesn&#8217;t scale well to 1,000+ connections, and eventually decided to work with a specialised solution (<a href="https://ably.com/">Ably</a>, similar to <a href="https://pusher.com/">Pusher</a>).</p><p>&#9996; <em>What's your best piece of <strong>learning</strong> on these topics?</em></p><p>Along the way we&#8217;ve learned a lot about ensuring stability in environments we don&#8217;t totally control: events, classrooms, the Microsoft tools&#8230; This has made us more aware of potential issues upfront and increased our resiliency in face of these.</p><p>&#11088;&nbsp;<em>Finally, are you&nbsp;<strong>hiring</strong>&nbsp;any developers these days?</em></p><p>We're always on the lookout for aspiring talents to join the Wooteam. Right now, we're looking for security engineers and developers (frontend &amp; backend), based either in Paris, Brussels or remote.</p><blockquote><p><strong>Thanks a ton to Jonathan</strong>&nbsp;for this interview &#128591;. Wooclap is a beautiful Belgian success story with an inspiring mission, kudos to them &#128077; If you&#8217;d like to work with Jonathan, <a href="https://wooclap.welcomekit.co/">join Wooclap&#8217;s team here</a>. See you in our next issue of RM-RF with&nbsp;<strong>Antoine Louiset from Yousign</strong>.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[RM-RF#5 Laurent from Front]]></title><description><![CDATA["4 years ago, we got locked out of production data for 6 hours"]]></description><link>https://www.rm-rf.io/p/rm-rf5-laurent-from-front</link><guid isPermaLink="false">https://www.rm-rf.io/p/rm-rf5-laurent-from-front</guid><dc:creator><![CDATA[Thomas Vanderstraeten]]></dc:creator><pubDate>Tue, 21 Dec 2021 15:36:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!W8t2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>&#128075;&nbsp;<em>Welcome to this issue of RM-RF, where you get to hear about crazy dev war stories from inspiring tech leaders.</em></p></blockquote><blockquote><p>This time I interviewed&nbsp;<strong>Laurent Perrin, co-founder and CTO of&nbsp;Front</strong>, a communication hub powering extraordinary customer experiences. Along his nearly 10-years journey at the company, Laurent has been through some pretty crazy stuff.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W8t2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W8t2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!W8t2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!W8t2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!W8t2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W8t2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:461321,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W8t2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!W8t2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!W8t2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!W8t2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1619c44-e743-41cf-b835-10aab472e0ed_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128368;&nbsp;<em>For&nbsp;<strong>how long</strong>&nbsp;have you been working on Front?</em></p><p>We started working on the project back in 2013 with <a href="https://twitter.com/collinmathilde">Mathilde</a> and quickly moved to SF to join YCombinator in 2014. Two years later we raised a $10M series A and have been growing fast ever since. Our latest fundraise was in 2020, with participations from leaders of the Future of Work industry (note: Front has Zoom&#8217;s CEO in their investors, how cool is that).</p><p>&#127945;&nbsp;<em>How big is your&nbsp;<strong>team</strong>&nbsp;today?</em></p><p>Today our team counts about 320 people. We initially took a small hit from the covid period, but things rapidly bounced back as companies adapted to new work realities which Front supports. This period proved our resiliency and enabled us to confidently grow the team afterwards. </p><p>In the R&amp;D team, we&#8217;ve got about 90 people. Most of them (70) are engineers, and we&#8217;ve also got a product &amp; design team as well as a pure research team. Each team has their own leader. Interestingly, none of these leaders are formally reporting to me (note: this setup is also that of <a href="https://podcasts.apple.com/gb/podcast/the-biggest-lessons-from-building-hubspot-from-co/id1535886300?i=1000543715135">Dharmesh Shah, Hubspot CTO</a>). I strive to be a partner rather than a manager. My role is hence focused on driving the overall vision and being custodian of the product and tech architectures. I&#8217;m also the voice of tech and product at the Board, to ensure we do put realistic expectations on engineering (Laurent referred here to the <a href="https://www.seattletimes.com/business/boeing-aerospace/experts-question-whether-boeings-board-of-directors-is-capable-of-righting-the-company/#:~:text=%E2%80%9CThe%20board%20you%20see%20today%20was%20largely%20created%20by%20McNerney%2C%20and%20he%20packed%20it%20with%20people%20with%20zero%20engineering%20experience%2C%E2%80%9D">Boeing board which lacked engineers</a> and led to the issues with the 737 Max).</p><p>&#128736;&nbsp;<em>Describe your&nbsp;<strong>tech stack</strong>&nbsp;in a nutshell?</em></p><p>Our back-end is a Node.js app with a constellation of small services (150) that exchange messages using queues. It&#8217;s noteworthy that our stack remained based on Node since its early days, without major shifts. In the front, we use React + Redux.</p><p>Our infra runs on AWS with Kubernetes, leveraging their proprietary SQS as well as common tech such as MySQL, Redis and ElasticSearch. Each AWS region has independent infra stacks.</p><p>We have sharded our main DB on 25 shards split by customers. We initially met a few issues linked to shard rebalancing occurring at bad times (e.g. during high user activity load). This led us to create a &#8220;stop button&#8221; to prevent rebalancing in set timeframes.</p><p>&#128027; <em>What is the most <strong>elusive bug</strong> you and your team ever had to fix?</em></p><p>We&#8217;ve met a seemingly futile but very frustrating bug related to our inbox messages counters (notification dots). Basically, the counters got out-of-sync with the actual messages count, leading users to believe they had unread messages when they had none (note: this was also a <a href="https://www.youtube.com/watch?v=nYkdrAPrdcw&amp;list=PLb0IAmt7-GS188xDYE-u1ShQmFFGbrk0v&amp;t=754s">hard problem for Facebook</a> back in the days, which ultimately pushed to the Flux architecture and React).</p><p>This was a complex real-time events issue. Counters are influenced by a plethora of events - with up to 200,000 updates per second at our scale. Even if we&#8217;re good on 99.999 of cases, it still means we generate 1-2 errors / second. </p><p>We initially tried to raise awareness within the teams on the need to pay extra attention to counters consistency. But as we grew the team we had to resort to more automated means. So we ended up carpet-testing counters across the whole test suite with something behaving like a global <em>after</em> hook. </p><p>&#128561;&nbsp;<em>What is the most&nbsp;<strong>stressful tech situation</strong>&nbsp;you ever faced?</em></p><p>In 2018, we shifted our infra to Terraform, meaning we had to start with a clean-up of the legacy &#8220;manual&#8221; infra. At some point during the deploy, Terraform identified a remaining KMS key (encryption key hosted on AWS) which had not been wiped out yet, and prompted the developer to do so.</p><p>The developer deleted the key and everything went smoothly for the next 2 hours, because AWS puts that grace period before actually destroying the key&#8230; It&#8217;s only after deletion that we realised it was the one key encrypting our production database.</p><p>This was really the worst event we ever had, as basically no one could access any data anymore. We were very lucky that we had an odd replica of the DB in another region with its KMS key untouched, purely because someone had been paranoid at some point and thought it&#8217;d be a good idea to have this redundancy.</p><p>We went through 6 hours of total downtime. Now, each shard comes with its replica. We contacted AWS about this event and they have since improved the KMS experience so that it cannot happen anymore (note: AWS now <a href="https://docs.aws.amazon.com/whitepapers/latest/kms-best-practices/aws-managed-and-customer-managed-cmks.html">marks clearly</a> when a key is directly linked to an AWS-managed resource such as a DB, with no deletion possible). We all sympathised with the developer who went through this adventure because of the misleading UI by then.</p><p>&#9996; <em>What's your best piece of <strong>learning</strong> on these topics?</em></p><p>Through my career, I&#8217;ve learned to shape clear expectations for the engineering teams. Before Front, I got trapped in a project with unrealistic technical expectations from the unset. Because of that I worked so hard I literally ended up at the hospital, and the project eventually didn&#8217;t deliver meaningful value. But I came back stronger and much more assertive about tech objectives.</p><p>&#11088;&nbsp;<em>Finally, are you&nbsp;<strong>hiring</strong>&nbsp;any developers these days?</em></p><p>We&#8217;ve got more than 30 open positions at the moment. Roles are located in Paris, San Francisco and Remote.</p><blockquote><p><strong>Thanks a ton to Laurent</strong>&nbsp;for this interview &#128591;. He&#8217;s a passionate tech leader with interesting takes on the role of the CTO in a fast-growing scale-up. If you&#8217;d like to work with Laurent, <a href="https://front.com/jobs">join Front&#8217;s team here</a>. See you in our next of issue of RM-RF with&nbsp;<strong>Jonathan Alzetta from Wooclap</strong>.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[RM-RF#4 Charles from Sortlist]]></title><description><![CDATA["After this all-night migration is the first time I had coffee"]]></description><link>https://www.rm-rf.io/p/rm-rf4-charles-from-sortlist</link><guid isPermaLink="false">https://www.rm-rf.io/p/rm-rf4-charles-from-sortlist</guid><dc:creator><![CDATA[Thomas Vanderstraeten]]></dc:creator><pubDate>Tue, 13 Jul 2021 10:12:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j4-5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>&#128075;&nbsp;<em>Welcome to this issue of RM-RF, where you get to hear about crazy dev war stories from inspiring tech leaders.</em></p></blockquote><blockquote><p>This week I interviewed&nbsp;<strong>Charles De Groote, co-founder and CTO of&nbsp;Sortlist</strong>, a marketing agencies matchmaking platform. Charles is a very pragmatic tech leader who&#8217;s learned a ton on the job as his team grew to 100+ people. Read on for exciting anecdotes!</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j4-5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j4-5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!j4-5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!j4-5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!j4-5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j4-5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:620391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j4-5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!j4-5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!j4-5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!j4-5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F429d1f27-3b35-4219-b061-e44f3e6e4f75_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128368;&nbsp;<em>For&nbsp;<strong>how long</strong>&nbsp;have you been working on Sortlist?</em></p><p>We launched the company 7 years ago together with my 3 co-founders. I was initially the only founder with a technical background. Interestingly, Michael, the founder who originally headed Product Management, decided to learn to code from scratch after we&#8217;d launched the company. He ended up working in the dev team and has been managing developers ever since.</p><p>&#127945;&nbsp;<em>How big is your&nbsp;<strong>team</strong>&nbsp;today?</em></p><p>The whole Sortlist family is 100+ people strong today. Of these, we&#8217;ve got 15 people in the engineering team and 5 people in the product team (3 PM + 2 designers), which is headed by Robin, our Head of Product.</p><p>The engineering team is composed of a dozen of versatile devs, along with 1 QA, 1 infra manager, and 2 line managers that handle all the 1-1s etc. These folks in particular give me a lot of leverage as I was getting overwhelmed by the 1-1s, especially in the beginning when we hired mostly junior talents. Nowadays I even find time to continue coding myself &#128523;.</p><p>We work as 3 independent product squads and perform quarterly &#8220;mercatos&#8221; where juniors and mediors get to change teams to tackle different challenges. Senior people mostly remain in their areas of expertise. </p><p>&#128736;&nbsp;<em>Describe your&nbsp;<strong>tech stack</strong>&nbsp;in a nutshell?</em></p><p>Well, it has evolved a lot over these 7 years, along with our knowledge and skills. It originally started with a Ruby on Rails monolith and an Angular front-end.</p><p>2 years ago we started splitting the back-end into microservices. After many experiments (NodeJS + Express,&nbsp; NestJS, Python + Flask, Ruby on Rails), we settled on RoR as our go-to framework. We took the same journey in the front-end 1 year ago, picking Next.js this time.</p><p>In terms of infra, we mostly run on AWS with Kubernetes. We were initially on Heroku but had to move away, partly for DB costs reasons. At &#8364;2K/month, they represented 50% of our infra costs - which we were able to bring down using AWS AuroraDB. Another issue with Heroku was inter-services communications which required us to go over the public internet to pass messages - clearly not an optimal setup.</p><p>It&#8217;s worth mentioning that we at Sortlist handle multiple apps corresponding to our multiple stakeholders: agencies, consumers, back-office&#8230; That&#8217;s 9 apps in total. We&#8217;ve hence been in fierce discussions over the opportunity to try and group it all as a monorepo to leverage common modules. However this would introduce more overhead in terms of DevOps (to silo builds etc). Given that infra is currently our least staffed area, we decided to keep it simple with separate repos.</p><p>&#128027; <em>What is the most <strong>elusive bug</strong> you and your team ever had to fix?</em></p><p>You surely know this famous quote from <a href="https://martinfowler.com/bliki/TwoHardThings.html">Phil Karlton</a>:</p><blockquote><p>There are only two hard things in Computer Science: cache invalidation and naming things.</p></blockquote><p>Well, we suffered badly from caching issues related to cookies &#127850;. Our multi-apps stack runs on multiple domains, which is made more complex because we use geographical TLDs such as .fr and .be. We made the painful mistake of sharing cookies between all these apps and domains, which is a dangerous pattern with hindsight. </p><p>What happened is that for the short period of one release, we unknowingly screwed up authentication in one app and this resulted in corrupted cookies being released into the wild and cached by our users for all apps. As a consequence we started getting more and more reports of users not able to login at all. We never managed to repro the issue while this problem came and went for several weeks. That is, until one of our employees actually faced the problem themselves. We of course got super excited and told them &#8220;<em>Don&#8217;t touch anything, a dev is on his way to check this out!</em>". That&#8217;s how we finally diagnosed the cookies issue. We ultimately had to go nuclear to fix it, invalidating all cookies at once &#129327;. </p><p>&#128561;&nbsp;<em>What is the most&nbsp;<strong>stressful tech situation</strong>&nbsp;you ever faced?</em></p><p>It&#8217;s again something caused by our relative ignorance back in the  days - 5 years ago to be precise. By then we didn&#8217;t master all the intricacies of DB management, which resulted in lengthy  migrations and often required putting the website in maintenance mode.</p><p>One such migration began innocently one night at 7PM and rapidly morphed into a monster event which required a ton of manual operations from my side. I ended up having to work the whole night on this situation. I normally never drink coffee, but when my co-founders came to work on that morning I had to ask them for one - probably the only time they ever got this request from me &#9749;!</p><p>&#9996; <em>What's your best piece of <strong>learning</strong> on these topics?</em></p><p>We&#8217;ve learned a lot all these years about the pitfalls of over-engineering our systems. At some point for example we rolled-out our own custom reverse-proxies in Node which led to unmanageable timeouts&#8230; Now we&#8217;ve wisened up as a team and focus on pragmatic solutions to real business problems. </p><p>Personally as a leader, I&#8217;ve learned how valuable it is to surround yourself with the right people with the right experience for the job. An example is the hiring of our DevOps manager and that of our more senior developers, who&#8217;ve brought in expertise I could never have developed on my own. </p><p>&#11088;&nbsp;<em>Finally, are you&nbsp;<strong>hiring</strong>&nbsp;any developers these days?</em></p><p>We went through a temp freeze with the covid situation but are now fully back on track and hiring 1 additional DevOps engineer as well as 3 React and 3 RoR engineers.</p><p></p><blockquote><p><strong>Thanks a ton to Charles</strong>&nbsp;for this interview &#128591;. It&#8217;s been very exciting to follow Sortlist&#8217;s story since its early days. Also cool to meet someone who&#8217;s worked with Ruby on Rails and NestJS, enjoying the same similarities between both frameworks &#10084;&#65039; If you&#8217;d like to work with Charles, <a href="https://sortlist.breezy.hr/">join Sortlist&#8217;s team here</a>. See you in our next of issue of RM-RF with&nbsp;<strong>Laurent Perrin from Front</strong>.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[RM-RF#3 Quentin from Pennylane]]></title><description><![CDATA["Our AWS bill grew 200x overnight"]]></description><link>https://www.rm-rf.io/p/rm-rf3-quentin-from-pennylane</link><guid isPermaLink="false">https://www.rm-rf.io/p/rm-rf3-quentin-from-pennylane</guid><dc:creator><![CDATA[Thomas Vanderstraeten]]></dc:creator><pubDate>Thu, 27 May 2021 12:28:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uqef!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>&#128075;&nbsp;<em>Welcome to this issue of RM-RF, where you get to hear about crazy dev war stories from inspiring tech leaders.</em></p></blockquote><blockquote><p>This week I interviewed&nbsp;<strong>Quentin de Metz, co-founder and CTO at&nbsp;<a href="https://www.pennylane.tech/">Pennylane</a></strong>, a fintech accounting platform. Quentin is a repeat entrepreneur who first founded Pricematch which was ultimately sold to Booking.com back in 2015. Together with the same co-founders, they launched Pennylane which is already proving a success. Quentin&#8217;s insights are super interesting for sharp tech execution in a fast-growth setup.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uqef!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uqef!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!uqef!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!uqef!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!uqef!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uqef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:920106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uqef!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!uqef!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!uqef!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!uqef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4770c47e-8a77-41c5-9a4a-08ae7d02c29e_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128368;&nbsp;<em>For&nbsp;<strong>how long</strong>&nbsp;have you been working on Pennylane?</em></p><p>Together with my cofounders, we started brainstorming on the topic of accounting during Summer 2019. We raised &#8364;4M in January 2020 followed by &#8364;15M just one year later. Our past experience at Pricematch definitely helped convincing investors and enabled us to move so fast.</p><p>&#127945;&nbsp;<em>How big is your&nbsp;<strong>team</strong>&nbsp;today?</em></p><p>As of now we&#8217;re about 100 people in the team (incl. the accounting service team), with a team of 30 dedicated to the product (note: that&#8217;s about 2 ppl recruited / week for one year non-stop!). Of this team, 23 are devs and the rest are product designers and owners. On the tech founders side, we&#8217;re 2 tech-focused founders and a 3rd one is focused on product.</p><p>A specificity of the product team is that we&#8217;re the only part of the company that&#8217;s fully remote - which definitely helps in sourcing the best talents. With that rate of growth, recruitment and onboarding are critical activities. As such, we&#8217;ve managed to put together a nice onboarding pipeline which allows newcomers to be fully setup and production-ready after 6 weeks.</p><p>&#128736;&nbsp;<em>Describe your&nbsp;<strong>tech stack</strong>&nbsp;in a nutshell?</em></p><p>We&#8217;ve got a very no-nonsense stack, preferring boring and pragmatic tech over shiny things. Our app stack is a Ruby on Rails monolith with a React frontend. When it comes to infra, we&#8217;re hosted on Heroku for compute and use AWS for DB (with RDS Postgres), storage and DNS.</p><p>Despite the fact that we&#8217;re dealing with financial fluxes, we&#8217;re not actually facing hard number-crunching jobs or big data challenges. Interestingly, the topic of accounting is also less complex than, say, HR and payroll because there are less custom rules. Our strategy to focus on a narrow set of accounting standards has also greatly helped us in keeping complexity under control. </p><p>&#128561;&nbsp;<em>What is the most&nbsp;<strong>stressful tech situation</strong>&nbsp;you ever faced?</em></p><p>I've got 2 stories from the Pricematch days, which were rich in learnings &#128522;.</p><p>Back in the days, Ruby on Rails didn&#8217;t use the BIGINT (64bits) data type for primary DB keys. And it turns out that we hit the 32bits limit with a table that stored the daily prices of tracked hotels, which recorded up to 1 billion records a day. This meant we had to perform a humongous migration to the BIGINT type, which took 24 hours in total during which the app was fully down &#128517;. Fortunately, this default has now been updated to 64bits since RoR 5.1 came out.</p><p>We then moved this table to AWS DynamoDB for performance reasons, which worked out quite well and cost us about $1/customer/month. This was completely fine given our monthly fee of $200/customer. But then we got acquired by Booking.com and the team there thought it&#8217;d be a good idea to offer this service for free to all their hotels. There were 200,000 of them and I was somehow not put in the loop in that decision&#8230; until finance came knocking on my door asking why they&#8217;d get this super large bill for DynamoDB, 200x larger than the previous one! As a fix, we ended up keeping only a subset of the latest prices and doing some machine learning on them.</p><p>&#128027; <em>What is the most <strong>elusive bug</strong> you and your team ever had to fix?</em></p><p>We&#8217;ve got a very focused bug-hunting mentality at Pennylane so that nothing falls through the cracks. We&#8217;ve gotten very good in particular at spotting anomalies in our DB (which is key for accounting) and tracing back the culprits.</p><p>We&#8217;ve deployed 2 valuable systems in that regard:</p><ul><li><p>For spotting anomalies, we use Metabase which performs daily CRON SQL requests on a read-replica of our DB looking for anomalies (e.g., VAT invoice elements that don&#8217;t add up) and alerts us by mail if any suspicious results are found</p></li><li><p>For tracing back the bugs that led to these anomalies, we have patched ActiveRecord so that each model saves the uuid of the request that last touched it. When we find a buggy record, we can then use that uuid and grep it in our logs to understand its origin</p></li></ul><p>&#9996; <em>What's your best piece of <strong>learning</strong> on these topics?</em></p><p>From the Pennylane growth journey, I&#8217;ve mostly learned how important it is to invest in recruiting. It helps so much to be very clear on the kinds of traits and skills you&#8217;re looking for so you&#8217;re less prone to make suboptimal compromises. Recruiting choices tend to be self-reinforcing: bad recruits make you lose a lot of time, while good recruits give you so much leverage.</p><p>&#11088;&nbsp;<em>Finally, are you&nbsp;<strong>hiring</strong>&nbsp;any developers these days?</em></p><p>We&#8217;re aiming to double our size towards 40 people in the tech team. We&#8217;ve originally been looking for full-stack Rails + React folks, but lately we extended openings for pure front-end positions too. We&#8217;re remote-first and growing fast, so do ping us to join the team!</p><blockquote><p><strong>Thanks a ton to Quentin</strong>&nbsp;for this interview &#128591;. The conversation we had was very inspiring to try and become a sharper and more focused tech leader myself. To get inspired too, <a href="https://www.welcometothejungle.com/fr/companies/pennylane/jobs">join Pennylane&#8217;s team here</a>. See you in our next of issue of RM-RF with&nbsp;<strong>Charles De Groote from Sortlist</strong>.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[RM-RF#2 Sandro from Forest Admin]]></title><description><![CDATA["I performed a full production reboot during onboarding"]]></description><link>https://www.rm-rf.io/p/rm-rf2-sandro-from-forest-admin</link><guid isPermaLink="false">https://www.rm-rf.io/p/rm-rf2-sandro-from-forest-admin</guid><dc:creator><![CDATA[Thomas Vanderstraeten]]></dc:creator><pubDate>Thu, 20 May 2021 13:05:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CeXn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>&#128075;&nbsp;<em>Welcome to this issue of RM-RF, where you get to hear about crazy dev war stories from inspiring tech leaders.</em></p></blockquote><blockquote><p>This week I interviewed&nbsp;<strong>Sandro Munda, founder and CEO at&nbsp;<a href="https://www.forestadmin.com/">Forest Admin</a></strong>. If you&#8217;ve ever been through the pains of building a custom admin panel for your apps, you&#8217;ll absolutely love their product as it does it all for you. Techwise, it&#8217;s a SaaS with an elegant architecture plugging into your DB - which brings a lot of cool challenges, as you&#8217;ll discover here.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CeXn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CeXn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 424w, https://substackcdn.com/image/fetch/$s_!CeXn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 848w, https://substackcdn.com/image/fetch/$s_!CeXn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 1272w, https://substackcdn.com/image/fetch/$s_!CeXn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CeXn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png" width="1200" height="631" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:964945,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CeXn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 424w, https://substackcdn.com/image/fetch/$s_!CeXn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 848w, https://substackcdn.com/image/fetch/$s_!CeXn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 1272w, https://substackcdn.com/image/fetch/$s_!CeXn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5b93ff-0edb-4054-9a5e-ccfbc7274af9_1200x631.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128368;&nbsp;<em>For&nbsp;<strong>how long</strong>&nbsp;have you been working on Forest Admin?</em></p><p>I wrote the first line of code 5 years ago after having struggled with admin panels as a freelance building custom apps. During my customer discovery calls, I&#8217;d ask &#8220;do you need an admin panel?&#8221;, and choose to go with Ruby on Rails just for this reason to leverage RailsAdmin &#128579;. Making a tech choice based on admin requirements is clearly suboptimal, which led me to identify this cool product opportunity.</p><p>I set on to build an MVP tech-agnostic admin panel that would be quick to setup (like ActiveRecord), flexible (as RailsAdmin is a poor solution beyond CRUD actions), and secure (as admin panels are by nature connected to sensitive data). I joined forces with eFounders, they saw the value in it, we tried it out at Fotolia (Thibaud Elziere&#8217;s previous company), and so the journey began.</p><p>&#127945;&nbsp;<em>How big is your&nbsp;<strong>team</strong>&nbsp;today?</em></p><p>Today, we&#8217;re about 30-people strong, of which 20 devs led by our CTO Arnaud Besnier. We recently reshaped our dev org to 3 subteams:</p><ul><li><p>The DevEx team, which develops the connectors (like our new RoR integration) to ensure a good experience for developers that roll-out Forest Admin in their stack</p></li><li><p>The OpsEx team, which drives pure operational features, such as integrations with 3rd parties (Stripe, Zendesk, Salesforce and many others)</p></li><li><p>The CoreEx team, which develops and maintains transversal parts of the product such as auth, billing and security</p></li></ul><p>Besides this, we regularly organize into war rooms to tackle specific topics (typically including 2 devs, 1 product person, 1 designer and 1 biz owner).</p><p>&#128736;&nbsp;<em>Describe your&nbsp;<strong>tech stack</strong>&nbsp;in a nutshell?</em></p><p>We&#8217;re a JS powerhouse with Node in the back and Ember in the front. We chose Ember as it offers the most flexibility and robustness when it comes to generating the fully dynamic UIs and data models required in the admin views and actions. </p><p>Nevertheless, we like to think of ourselves as tech agnostic and also ensure that all devs keep a full-stack mindset. This is a real requirement for us, given that we integrate with multiple frameworks across languages (after Node and RoR, we&#8217;re now aiming for Django and Laravel).</p><p>Our infra is rather straightforward and monolithic, leveraging Postgres and Redis for persistence and cache.</p><p>&#128561;&nbsp;<em>What is the most&nbsp;<strong>stressful tech situation</strong>&nbsp;you ever faced?</em></p><p>Well, given the integration challenges of our product, we never know what we&#8217;ll bump into next! But there&#8217;s one anecdote which is still vivid, from the very early days of Forest Admin.</p><p>The first MVP I implemented was basically hardcoded for a single user. When I ran the first onboarding with the first user, the app crashed because I already registered myself as user. I hence had to perform a full production reboot in front of the user - which led this user to claim ID 1 in our DB, while I&#8217;ve got ID 2 &#128517;.</p><p>&#128027; <em>What is the most <strong>elusive bug</strong> you and your team ever had to fix?</em></p><p>I can&#8217;t think of a specific bug, but I can say that Forest Admin is probably one of the best debugging schools out there. We basically run 1/3 of our code within our users&#8217; environments, with little to no visibility into what&#8217;s causing issues. We may get stack traces and screenshots but rarely get the opportunity to explore things ourselves. As a consequence, it forces us to ask extremely sharp questions to our users during debugging, which is quite rewarding when you start mastering it.</p><p>It also often turns out that &#8220;bugs&#8221; are caused by exotic elements in our users&#8217; codebases. This was actually our #1 tech challenge: being able to deploy Forest Admin on real-life legacy codebases with all their intricacies and oddities. In retrospect, this is proving to be one of the most powerful barriers to entry for competitors, as we&#8217;ve met and unit-tested a huge variety of setups.</p><p>&#9996; <em>What's your best piece of <strong>learning</strong> on these topics?</em></p><p>My biggest learning as a dev is to always resist the temptation to perform a full rewrite, even in the face of seemingly overly complex layers of code. As we&#8217;ve discovered with our support for a wide variety of setups, complex code is there for a reason and is hard to reproduce from scratch.</p><p>&#11088;&nbsp;<em>Finally, are you&nbsp;<strong>hiring</strong>&nbsp;any developers these days?</em></p><p>We&#8217;ve got plenty of open positions, mostly full-stack and tech agnostic. Our growth strategy is product-led, which means we expect developers to heavily drive the business going forward. If you&#8217;re open-minded and excited to join a growing company with a strong tech culture, you should definitely jump aboard the rocket ship &#128640;.</p><blockquote><p><strong>Thanks a ton to Sandro</strong>&nbsp;for this interview &#128591;. Sandro is such a passionate and authentic leader. We first met over lunch 5 years ago when he was just starting Forest Admin and it seems he has kept the same aura of energy when talking about the product ever since. <a href="https://www.forestadmin.com/jobs/">Join his team here</a>. See you in our next of issue of RM-RF with&nbsp;<strong>Quentin de Metz from Pennylane</strong>.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[RM-RF#1 Jeremy from Keyrock]]></title><description><![CDATA["A faulty websocket can cost us thousands of dollars"]]></description><link>https://www.rm-rf.io/p/rm-rf-1-jeremy-de-groodt-keyrock</link><guid isPermaLink="false">https://www.rm-rf.io/p/rm-rf-1-jeremy-de-groodt-keyrock</guid><dc:creator><![CDATA[Thomas Vanderstraeten]]></dc:creator><pubDate>Tue, 11 May 2021 07:01:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ldUL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>&#128075; <em> Welcome to this issue of RM-RF, where you get to hear about crazy dev war stories from inspiring tech leaders.</em></p></blockquote><blockquote><p>This week I interviewed <strong>Jeremy De Groodt, co-founder and CTO at <a href="https://keyrock.eu/">Keyrock</a></strong>. Keyrock is a crypto market maker and liquidity provider, counting big exchanges such as Binance as customers. With several <strong>&#8364;M worth of assets</strong> managed by Keyrock, Jeremy is the perfect fit for a first encounter with a <strong>CTO with dev war stories</strong>.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ldUL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ldUL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!ldUL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!ldUL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!ldUL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ldUL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:564070,&quot;alt&quot;:&quot;Jeremy De Groodt, Keyrock&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Jeremy De Groodt, Keyrock" title="Jeremy De Groodt, Keyrock" srcset="https://substackcdn.com/image/fetch/$s_!ldUL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!ldUL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!ldUL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!ldUL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f1c6e0-e56e-40d7-bd75-20422416a6d6_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128368;  <em>For <strong>how long</strong> have you been working on Keyrock?</em></p><p>We started Keyrock in December 2017 and I&#8217;ve led the tech part ever since. I started the team with 2 interns and we managed to raise funds based on the prototype developed back then.</p><p>&#127945;  <em>How big is your <strong>team</strong> today?</em></p><p>We&#8217;re now 40 in the team, of which 17 devs and 10 financial traders looking after the markets. The rest of the team is also composed of quants, folks with PhDs in maths and physics - skills that are key to propel our activity of algorithmic trading.</p><p>It&#8217;s really important to be able to count on this team as any screwup can have significant financial impact &#128184;. We manage several millions of euros in our order books at anytime, and it&#8217;s a nightmare if the process around them fails.</p><p>&#128736;  <em>Describe your <strong>tech stack</strong> in a nutshell?</em></p><p>We&#8217;re organized in 3 teams that reflect our stack:</p><ul><li><p>The infrastructure team takes care of devops, tooling and a lot of data engineering (e.g. for monitoring and back-testing). We ingest a humongous amount of data from real-time price monitoring of crypto exchanges, and this causes significant challenges. To give you a sense of the magnitude of our data streams: we&#8217;re in direct contact with AWS regarding Kinesis data streaming as we constantly hit their max capacity. </p></li><li><p>The tech operations team mainly handles deployments which are still mostly manual given their criticality. We do a lot of progressive / canary deployments, one market at a time. These folks are like super-devops that also handle ticketing from within the team, e.g. if the quants suspect that something is wrong with our systems, the tech ops folks will look into it directly.</p></li><li><p>The algo team is the biggest one and organized in two parts: one dedicated to financial decision-making (powered by Rust), and one dedicated to maintaining connectivity with the exchanges (powered by Node). We&#8217;re integrated with 90 exchanges which all have different APIs and do not maintain SLAs&#8230; making it sometimes hard to differentiate between issues coming from bad data from exchanges or from bad financial decisions. As such, a faulty websocket with them can cost us a lot of money.</p></li></ul><p>Apart from that, our architecture is being consolidated to a dozen microservices, so that we reduce inter-services communication latency (which is literally worth money in high-frequency trading). In that same philosophy, we prefer using gRPC/Protobuf for speed rather than JSON.</p><p>&#128561;  <em>What is the most <strong>stressful tech situation</strong> you ever faced?</em></p><p>By the end of 2020, our financial performance started to deteriorate. We could not find any obvious reason for this trend, nor financial nor technical. At some point just before XMas break, it got so bad that we were actually losing more money every day, with everyone freaking out about it.</p><p>We had to make a bold move, and we did: we cancelled everyone&#8217;s holidays, had people come back to the office, and tasked the whole company on finding the cause of that issue. People were a bit pissed but very committed too because the pressure was real.</p><p>We ultimately tracked down the bug after several days, on the morning of XMas &#127873; ! It turns out that we were receiving outdated data from some exchanges (up to 30s old), which led us to make bad financial decisions. This was a stark reminder never to take external APIs performance for granted. Since then, we&#8217;ve timestamped their data like mad and have been applying penalties on outdated input in our algos. Being fully data-driven as we are also requires to go meta and measure the quality of your data &#128269;.</p><p>&#11088;  <em>Are you <strong>hiring</strong> any developers these days?</em></p><ul><li><p>We&#8217;re looking for Rust developers as well as full-stack JS devs to improve our tooling and connectivity with exchanges.</p></li><li><p>We&#8217;re also looking for a TechOps person: a superdev / analyst with a Swiss knife mentality to help running our tech operations.</p></li></ul><p>&#10084;&#65039;  <em>Finally, some <strong>learnings about yourself</strong> as a tech leader?</em></p><p>As a CTO, I&#8217;ve always struggled to find the right balance between my love for coding and the need to step back and maintain a strategic vision.</p><p>It has greatly helped to recruit very talented people on some fronts (infra, algos). They fully own the code and ensure I do not fall into the rabbit holes of the details. My role with them becomes that of challenging decisions at high level and pushing the company strategy. </p><p>Nevertheless I still like to code and try to commit on our codebase once in a while (without becoming a bottleneck for other devs &#129325;). And I still do some side-projects on my Raspberry Pi!</p><blockquote><p><strong>Thanks a ton to Jeremy</strong> for this interview &#128591;. I&#8217;ve had the pleasure of collaborating with him on several occasions (even a full-night Blockchain Hackaton) - he&#8217;s a <strong>super inspiring tech leader</strong>, so do not hesitate to reach out to <a href="https://keyrock.freshteam.com/jobs">join his team</a>. See you in our next of issue of RM-RF with <strong>Sandro Munda from Forest Admin</strong>.</p></blockquote><p></p>]]></content:encoded></item></channel></rss>