CINXE.COM
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Factorial Labs</title><link rel="canonical" href="https://labs.factorialhr.com" data-next-head=""/><meta property="og:title" content="Factorial Labs" data-next-head=""/><meta name="description" content="A sneak peek into the minds at Factorial and how we keep it all moving" data-next-head=""/><meta property="og:description" content="A sneak peek into the minds at Factorial and how we keep it all moving" data-next-head=""/><meta property="og:image" content="/images/downloaded/cover/2e11f350-5508-47c6-821b-42f76b169abe.jpg" data-next-head=""/><meta property="twitter:image" content="/images/downloaded/cover/2e11f350-5508-47c6-821b-42f76b169abe.jpg" data-next-head=""/><meta property="twitter:title" content="Factorial Labs" data-next-head=""/><meta property="twitter:description" content="A sneak peek into the minds at Factorial and how we keep it all moving" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><link rel="preload" as="image" href="/images/downloaded/cover/2e11f350-5508-47c6-821b-42f76b169abe.jpg" data-next-head=""/><link rel="preload" as="image" href="/images/downloaded/author/1b6480a6-0c27-46de-9f7a-421d214441de.jpeg" data-next-head=""/><link href="https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,400;0,600;1,400&family=IBM+Plex+Mono:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet"/><link rel="alternate" type="application/rss+xml" title="RSS Feed for Factorial Labs" href="/rss.xml"/><link rel="icon" href="/favicon.png"/><script defer="" data-domain="labs.factorialhr.com" src="https://plausible.io/js/plausible.js"></script><link rel="preload" href="/_next/static/css/3a68818a0c678010.css" as="style"/><link rel="stylesheet" href="/_next/static/css/3a68818a0c678010.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-0a3c46d6a97f32b8.js" defer=""></script><script src="/_next/static/chunks/framework-5f43af1a76a0211a.js" defer=""></script><script src="/_next/static/chunks/main-6ebe9eeec39ab916.js" defer=""></script><script src="/_next/static/chunks/pages/_app-a52f31dfbc15af99.js" defer=""></script><script src="/_next/static/chunks/777-6f09ced119fa6a2f.js" defer=""></script><script src="/_next/static/chunks/pages/index-cc210419aed288da.js" defer=""></script><script src="/_next/static/4yujYJZpvLDUixRdlcc-d/_buildManifest.js" defer=""></script><script src="/_next/static/4yujYJZpvLDUixRdlcc-d/_ssgManifest.js" defer=""></script></head><body class="text-gray-800 relative bg-white"><div id="__next"><div class="flex h-full flex-col"><div class="relative mx-auto w-full max-w-7xl px-4 md:px-6 lg:px-8 py-8"><nav class="flex items-center"><h2 class="text-neutral-600 text-neutral- gray-50 flex-1"><a class="font-logo inline-flex items-center justify-center" aria-label="Factorial Labs" href="/"><svg class="h-8" viewBox="0 0 459 68" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M441.748 32.2979C441.748 33.1475 442.301 33.8483 443.405 34.4005C444.552 34.9102 445.932 35.3775 447.547 35.8023C449.161 36.1846 450.775 36.6943 452.389 37.3314C454.003 37.9261 455.362 38.9456 456.467 40.3898C457.614 41.834 458.187 43.6392 458.187 45.8056C458.187 49.0763 456.955 51.6037 454.491 53.3877C452.07 55.1292 449.033 56 445.38 56C438.839 56 434.379 53.4726 432 48.4179L439.136 44.4038C440.071 47.1648 442.152 48.5453 445.38 48.5453C448.311 48.5453 449.777 47.6321 449.777 45.8056C449.777 44.956 449.203 44.2764 448.056 43.7667C446.952 43.2145 445.593 42.726 443.978 42.3012C442.364 41.8765 440.75 41.3455 439.136 40.7083C437.522 40.0712 436.141 39.073 434.995 37.7137C433.89 36.312 433.338 34.5704 433.338 32.4891C433.338 29.3458 434.485 26.8821 436.779 25.0981C439.115 23.2716 442.003 22.3584 445.444 22.3584C448.035 22.3584 450.392 22.953 452.516 24.1424C454.64 25.2893 456.318 26.9458 457.55 29.1122L450.541 32.9351C449.522 30.7688 447.823 29.6856 445.444 29.6856C444.382 29.6856 443.49 29.9192 442.768 30.3865C442.088 30.8537 441.748 31.4909 441.748 32.2979Z" fill="#FFAEBF"></path><path d="M55.9926 60.4154C50.1478 65.1581 42.6981 68 34.5846 68C26.4711 68 19.0214 65.1581 13.1766 60.4154C19.0214 55.6727 26.4711 52.8308 34.5846 52.8308C42.6981 52.8308 50.1478 55.6727 55.9926 60.4154Z" fill="#FF355E"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M12.9902 52.2088C8.83993 47.2919 6.33847 40.9381 6.33847 34C6.33847 18.4001 18.9847 5.75385 34.5846 5.75385C50.1845 5.75385 62.8308 18.4001 62.8308 34C62.8308 40.9381 60.3293 47.2919 56.1791 52.2088C57.607 53.1009 58.9756 54.0788 60.2773 55.1351L60.846 55.5965C65.6811 49.7238 68.5846 42.201 68.5846 34C68.5846 15.2223 53.3623 0 34.5846 0C15.8069 0 0.584625 15.2223 0.584625 34C0.584625 42.201 3.48815 49.7238 8.3233 55.5965L8.89196 55.1351C10.1937 54.0788 11.5622 53.1009 12.9902 52.2088Z" fill="#FF355E"></path><path d="M47.1385 32.9538C47.1385 39.8871 41.5179 45.5077 34.5846 45.5077C27.6513 45.5077 22.0308 39.8871 22.0308 32.9538C22.0308 26.0205 27.6513 20.4 34.5846 20.4C41.5179 20.4 47.1385 26.0205 47.1385 32.9538Z" fill="#FF355E"></path><path d="M325.415 55.9692H317.046V9.41539H325.415V55.9692Z" fill="#FF355E"></path><path d="M302.008 28.2697V24.5846H310.246V55.9692H302.008V51.3555C299.722 54.2966 296.44 55.7672 292.301 55.7672C288.36 55.7672 284.283 54.2362 281.445 51.1742C278.647 48.0719 277.292 44.3293 277.292 39.8572C277.292 35.4254 278.647 31.6137 281.445 28.5114C284.283 25.4091 288.161 24.0615 292.103 24.0615C296.242 24.0615 299.722 25.3286 302.008 28.2697ZM287.867 45.9769C289.404 47.5482 291.355 48.3338 293.72 48.3338C296.085 48.3338 298.036 47.5482 299.574 45.9769C301.15 44.3653 302.008 42.3105 302.008 39.8126C302.008 37.3147 301.15 35.28 299.574 33.7088C298.036 32.0972 296.085 31.2914 293.72 31.2914C291.355 31.2914 289.404 32.0972 287.867 33.7088C286.33 35.28 285.531 37.3147 285.531 39.8126C285.531 42.3105 286.33 44.3653 287.867 45.9769Z" fill="#FF355E"></path><path d="M249.535 24.5846V30.1481C250.215 28.2124 251.913 26.4126 252.876 25.7619C253.768 25.1597 255.816 24.0615 257.938 24.0615V32.543C255.576 32.2135 253.858 33.2698 252.156 34.5961C250.351 36.002 249.569 37.9939 249.569 40.9593V55.9692H241.2V24.5846H249.535Z" fill="#FF355E"></path><path d="M164.939 55.9692C160.381 55.9692 156.57 54.4383 153.504 51.3764C150.479 48.3146 148.615 44.6293 148.615 40.1171C148.615 35.6049 150.479 31.7162 153.504 28.6543C156.57 25.5925 160.381 24.0615 164.939 24.0615C167.883 24.0615 170.566 24.7666 172.986 26.1766C175.406 27.5867 177.582 29.4802 178.833 31.8572L171.776 35.7852C171.171 34.5363 170.243 33.5492 168.993 32.8241C167.783 32.0989 166.411 31.7363 164.878 31.7363C162.539 31.7363 160.603 32.5219 159.07 34.0931C157.538 35.624 156.627 37.5981 156.627 40.0154C156.627 42.3521 157.538 44.3261 159.07 45.9376C160.603 47.4686 162.539 48.234 164.878 48.234C166.452 48.234 167.843 47.8916 169.053 47.2067C170.303 46.4815 171.573 45.4945 172.178 44.2456L178.954 48.1132C177.623 50.5304 175.727 52.4441 173.267 53.8541C170.847 55.2642 167.843 55.9692 164.939 55.9692Z" fill="#FF355E"></path><path d="M135.015 28.2965V24.5846H143.385V55.9692H135.015V51.5294C132.693 54.4893 129.359 55.9692 125.155 55.9692C121.151 55.9692 117.01 54.4285 114.126 51.347C111.283 48.2249 109.908 44.4585 109.908 39.9579C109.908 35.4978 111.283 31.6618 114.126 28.5398C117.01 25.4177 120.949 24.0615 124.953 24.0615C129.158 24.0615 132.693 25.3366 135.015 28.2965ZM120.65 46.1165C122.212 47.6978 124.194 48.4885 126.596 48.4885C128.999 48.4885 130.981 47.6978 132.543 46.1165C134.144 44.4947 135.015 42.4268 135.015 39.913C135.015 37.3991 134.144 35.3515 132.543 33.7702C130.981 32.1484 128.999 31.3375 126.596 31.3375C124.194 31.3375 122.212 32.1484 120.65 33.7702C119.088 35.3515 118.277 37.3991 118.277 39.913C118.277 42.4268 119.088 44.4947 120.65 46.1165Z" fill="#FF355E"></path><path d="M106.246 9.44336V17.9073C102.002 17.6198 99.9931 20.0205 99.9931 23.8V24.5846H106.246V33.0719H99.9692V55.9692H91.6V33.0719H87.4154V24.5846H91.6V23.8C91.6 19.4043 93.4262 15.6055 95.7887 13.3871C98.1912 11.1277 101.601 9.1558 106.246 9.44336Z" fill="#FF355E"></path><path d="M272.585 55.9692H264.215V40.2769V24.5846H272.585V55.9692Z" fill="#FF355E"></path><path d="M273.108 14.1231C273.108 16.7231 271 18.8308 268.4 18.8308C265.8 18.8308 263.692 16.7231 263.692 14.1231C263.692 11.5231 265.8 9.41539 268.4 9.41539C271 9.41539 273.108 11.5231 273.108 14.1231Z" fill="#FF355E"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M220.8 55.9692C229.467 55.9692 236.492 48.9435 236.492 40.2769C236.492 31.6103 229.467 24.5846 220.8 24.5846C212.133 24.5846 205.108 31.6103 205.108 40.2769C205.108 48.9435 212.133 55.9692 220.8 55.9692ZM220.8 48.3846C225.278 48.3846 228.908 44.7547 228.908 40.2769C228.908 35.7992 225.278 32.1692 220.8 32.1692C216.322 32.1692 212.692 35.7992 212.692 40.2769C212.692 44.7547 216.322 48.3846 220.8 48.3846Z" fill="#FF355E"></path><path d="M183.138 42.904V19.4117L191.864 16.7385V24.6342H200.48V32.8679H191.864C191.864 35.7194 191.755 40.4662 191.755 42.6904C191.755 46.2191 193.924 47.6762 196.101 47.6762C198.277 47.6762 200.223 46.3856 200.223 46.3856L203.015 53.7453C203.015 53.7453 196.874 57.6022 190.764 55.1575C184.655 52.7128 183.138 48.0264 183.138 42.904Z" fill="#FF355E"></path><path d="M377.762 28.2082V24.5231H386V55.9077H377.762V51.294C375.475 54.2351 372.194 55.7057 368.055 55.7057C364.113 55.7057 360.037 54.1747 357.199 51.1127C354.4 48.0104 353.046 44.2678 353.046 39.7957C353.046 35.3639 354.4 31.5522 357.199 28.4499C360.037 25.3476 363.915 24 367.857 24C371.995 24 375.475 25.267 377.762 28.2082ZM363.621 45.9153C365.158 47.4866 367.109 48.2723 369.474 48.2723C371.839 48.2723 373.79 47.4866 375.327 45.9153C376.904 44.3038 377.762 42.249 377.762 39.7511C377.762 37.2531 376.904 35.2185 375.327 33.6472C373.79 32.0356 371.839 31.2299 369.474 31.2299C367.109 31.2299 365.158 32.0356 363.621 33.6472C362.083 35.2185 361.285 37.2531 361.285 39.7511C361.285 42.249 362.083 44.3038 363.621 45.9153Z" fill="#FFAEBF"></path><path d="M346.369 56H338V9.44615H346.369V56Z" fill="#FFAEBF"></path><path d="M402.738 28.3005L402.869 9.44615H394.5V56H402.738V51.3863C405.025 54.3274 408.306 55.798 412.445 55.798C416.387 55.798 420.463 54.267 423.301 51.205C426.1 48.1027 427.454 44.3601 427.454 39.888C427.454 35.4562 426.1 31.6445 423.301 28.5422C420.463 25.4399 416.585 24.0923 412.643 24.0923C408.505 24.0923 405.025 25.3593 402.738 28.3005ZM416.879 46.0076C415.342 47.5789 413.391 48.3646 411.026 48.3646C408.661 48.3646 406.71 47.5789 405.173 46.0076C403.596 44.3961 402.738 42.3413 402.738 39.8434C402.738 37.3454 403.596 35.3108 405.173 33.7395C406.71 32.1279 408.661 31.3222 411.026 31.3222C413.391 31.3222 415.342 32.1279 416.879 33.7395C418.417 35.3108 419.215 37.3454 419.215 39.8434C419.215 42.3413 418.417 44.3961 416.879 46.0076Z" fill="#FFAEBF"></path></svg></a></h2><div class="hidden sm:flex"><a href="https://careers.factorialhr.com" class="relative inline-flex w-full items-center justify-center rounded-md border border-transparent bg-radical-100 px-5 py-3 text-base font-medium text-white transition-colors will-change-transform hover:bg-radical-120 sm:w-auto">Join Factorial</a></div></nav></div><div class="flex-1"><div><main><div class="relative mx-auto w-full max-w-7xl px-4 md:px-6 lg:px-8 "><div class="mb-10"><h2 class="text-neutral-600 text-3xl font-extrabold tracking-tight">Our thoughts</h2><p class="mt-4 text-lg text-neutral-60">A sneak peek into the minds at Factorial and how we keep it all moving</p></div><div class="mb-10"><div><div class="mb-10"><article class="grid-cols-2 gap-10 md:grid md:h-56 lg:h-80"><div class="relative overflow-hidden rounded-lg border border-neutral-20 md:h-auto"><a tabindex="-1" class="block" href="/posts/optimize-for-inspiration"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="/images/downloaded/cover/2e11f350-5508-47c6-821b-42f76b169abe.jpg" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6 md:py-2"><div class="flex-1"><a class="block" href="/posts/optimize-for-inspiration"><p class="text-xl font-semibold lg:text-2xl xl:text-3xl">Optimize for Inspiration</p><p class="mt-3 text-base text-neutral-60 lg:text-lg">Is your team inspired or uninspired? Learn about their traits and what to do about them.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Josep Jaume</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="/images/downloaded/author/1b6480a6-0c27-46de-9f7a-421d214441de.jpeg" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Josep Jaume</p></div></div></div></div></article></div><div class="mx-auto grid gap-10 sm:grid-cols-2 lg:max-w-none lg:grid-cols-3"><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/engineering-lessons-from-football"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/6a7d32f0-379f-4bf6-a0fb-fe6476b7b97f.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Career</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/engineering-lessons-from-football"><p class="text-xl font-semibold">Engineering Lessons From Football: Scoring Goals in the Game of Collaboration</p><p class="mt-3 text-base text-neutral-60">A delve into the intersection of football dynamics and the world of engineering, drawing parallels that illuminate essential principles for effective teamwork and professional growth. Through vivid comparisons to football gameplay, we explore how strategies employed on the field align with collaborative approaches within engineering teams. From emphasizing the significance of teamwork over individual brilliance to tackling conflicts of ideas rather than personalities, each analogy unlocks invaluable lessons applicable to software development and team dynamics</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Abiodun Olowode</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/467d1707-8c37-4043-beac-0a669526d2b0.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Abiodun Olowode</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/revolutionizing-my-retrospectives"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/9deb45d9-a943-460a-887f-38958b0f8dcf.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/revolutionizing-my-retrospectives"><p class="text-xl font-semibold">Revolutionizing My Retrospectives: How I Transformed My Process and Results</p><p class="mt-3 text-base text-neutral-60"></p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Marina Planells</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/c373fa5c-d0e4-48b6-ab17-39f00bf7db6a.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Marina Planells</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/from-webpack-to-vite"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/03cb81e3-32d1-4060-929d-dc50d4e03eeb.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Developer Experience</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/from-webpack-to-vite"><p class="text-xl font-semibold">Factorial's frontend journey to Vite</p><p class="mt-3 text-base text-neutral-60">Marc takes us on a journey from Factorial’s use of webpack, challenges faced, the investigation for a replacement, the solution proffered and the team’s adoption of this profferred solution. Get ready for a great ride!</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Marc Torrelles</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/e01c13aa-bf63-4120-990d-4bd2386c2c59.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Marc Torrelles</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/belonging-and-the-return-of-love"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/62744a6a-6c17-4f18-a0ff-b3e6b1a50434.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/belonging-and-the-return-of-love"><p class="text-xl font-semibold">Belonging and the return of love.</p><p class="mt-3 text-base text-neutral-60">Employees are at their best when they feel that they belong in the organization. Belonging is vital to performance, innovation, and retention. Let’s delve deeper into this topic and why this is good for business.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Ray Garcia</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/afaa428e-a4d5-4495-8040-77726f266ea8.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Ray Garcia</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/leaddev-berlin-2022"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/b10aab75-67e8-4897-b777-9d0a0683711f.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Growth</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/leaddev-berlin-2022"><p class="text-xl font-semibold">LeadDev Berlin wrap-up</p><p class="mt-3 text-base text-neutral-60">Part of our team went to LeadDev Berlin 2022. This article is the highlights of the 2 days of the conference for Garance, through her favorite talks!</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Garance Vallat</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/cffdb5f5-9f93-42d5-8ebf-7dce30fe579e.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Garance Vallat</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/discoveries-of-a-junior-software-developer"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/a96a1f13-362f-41b5-8b4f-e93620b348d2.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Career</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/discoveries-of-a-junior-software-developer"><p class="text-xl font-semibold">Discoveries of a Junior software developer</p><p class="mt-3 text-base text-neutral-60">Being a junior software developer on its own is an experience. Knowledge unfolds, and discoveries are made. Yara shares a personal experience that many junior developers can relate to.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Yara Debian</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/019eea3b-bb93-4358-b959-a9df9ad48116.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Yara Debian</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/business-intelligence-as-a-service"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/5aa4af47-3a01-4eed-b4cb-af984dc42b1b.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Data</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/business-intelligence-as-a-service"><p class="text-xl font-semibold">Business Intelligence as a service — a journey</p><p class="mt-3 text-base text-neutral-60">Your customers call, and they want their data back. How can you give them access without compromising your release cycle, blowing up operations, or breaking the bank? In this article, you can learn about our journey through a couple of iterations, technical details, and all.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Txus Bach</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/c54da30b-a151-4959-adad-68b77c7baa41.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Txus Bach</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/how-we-merged-our-main-repositories-into-a-single-monorepo"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/8b9b3aa6-d54c-4b01-8699-2b5fc1677f26.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Maintainability</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/how-we-merged-our-main-repositories-into-a-single-monorepo"><p class="text-xl font-semibold">How we merged our main repositories into a single monorepo</p><p class="mt-3 text-base text-neutral-60">Get a detailed description of how we merged our main repositories into a single monorepo - the reasons, considerations, dos and don’ts, challenges, and wins.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Ferran Basora</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/238445f9-5f1c-4fa8-b149-177fbe404097.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Ferran Basora</p></div></div><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">David Morcillo</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/25862e99-fa3a-4490-808b-38804a8543ac.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">David Morcillo</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/what-are-embeddings-really"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/808b8685-8c10-4f25-9e82-0645f04d1381.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">AI</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/what-are-embeddings-really"><p class="text-xl font-semibold">What are embeddings, really?</p><p class="mt-3 text-base text-neutral-60">How can AIs manipulate abstract concepts? In this article, we’ll develop our knowledge about embeddings, a powerful technique behind AIs today.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Txus Bach</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/c54da30b-a151-4959-adad-68b77c7baa41.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Txus Bach</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/product-management-lesson-from-daughter"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/8d85c87c-b9bf-4b41-9de2-e26a48c12913.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Product</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/product-management-lesson-from-daughter"><p class="text-xl font-semibold">How my 2-year-old daughter taught me a valuable Product-Management lesson</p><p class="mt-3 text-base text-neutral-60">A personal story about the nuances and subtle details we tend to overlook during communication/understanding, hence, making it ineffective, and how this relates to Product Management.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Paulo Ávila</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/a1790c59-48f5-4ea1-887c-274de5eda1a9.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Paulo Ávila</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/sneak-peek-behind-the-scenes-of-mobx"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/75260c44-494e-4f5c-8a4f-36cfb0e32902.jpeg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">MobX</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/sneak-peek-behind-the-scenes-of-mobx"><p class="text-xl font-semibold">Sneak Peek Behind the Scenes of MobX</p><p class="mt-3 text-base text-neutral-60">In the first three chapters of the MobX series, we have demonstrated how MobX works. However, in this chapter, we focus a little on how MobX works under the hood. What makes it tick you might say? How does MobX handle state changes internally?</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Hameed Damee</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Hameed Damee</p></div></div><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Pau Ramon Revilla</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/bef20d92-e8fb-4db1-ae8e-02100197c6eb.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Pau Ramon Revilla</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/bullet-or-prosopite-for-nplus1"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/71a109e9-65cf-4b23-86d8-fef8ab633f5e.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Ruby</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/bullet-or-prosopite-for-nplus1"><p class="text-xl font-semibold">The N+1 Dilemma - Bullet or Prosopite?</p><p class="mt-3 text-base text-neutral-60">Improving the performance of any Ruby application usually entails fixing N+1 queries. In this article, we’ll find out how well the Bullet and Prosopite gem perform in identifying the existence of these N+1 queries. </p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Abiodun Olowode</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/467d1707-8c37-4043-beac-0a669526d2b0.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Abiodun Olowode</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/async-action-with-mobx"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/b51846f8-11ec-4bfc-9e63-1f443bd8b51a.jpeg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">React</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/async-action-with-mobx"><p class="text-xl font-semibold">Async Action with MobX</p><p class="mt-3 text-base text-neutral-60">This article introduces the usage of asynchronous methods in mobx. Interacting with APIs is a major aspect of frontend development, hence the need for asynchronous calls. The article shows how async calls can be handled in mobx</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Hameed Damee</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Hameed Damee</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/the-epiphany-from-individual-contributor-to-manager"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/3047c7e5-f2c4-4530-b6ba-a32de9a8a145.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/the-epiphany-from-individual-contributor-to-manager"><p class="text-xl font-semibold">The epiphany: From Individual Contributor to Engineering Manager (and back)</p><p class="mt-3 text-base text-neutral-60">This article gives us insight into the path of an engineer in Factorial who went from an individual contributor position, to an Engineering manager, what helped him, what he learned, and what he took back as he transitioned back into the role of an individual contributor.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Omar Sotillo Franco</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/65ed50e7-d2d7-43c6-b340-13ad30b3c783.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Omar Sotillo Franco</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/demystifying-the-javascript-call-stack"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/76eb6916-47db-4b22-8aa2-c8c05b489e8b.webp"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Javascript</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/demystifying-the-javascript-call-stack"><p class="text-xl font-semibold">Demystifying the JavaScript call stack</p><p class="mt-3 text-base text-neutral-60">At the most basic level, the call stack is a data structure that utilizes the Last in, First out(LIFO) principle to store and manage function invocations. This article would serve as a deep dive into how this piece of technology works in JavaScript.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Johnson Ogwuru</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/d784355c-883c-435e-ab6b-e39c71232b6e.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Johnson Ogwuru</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/hooks-considered-harmful"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/b5fb9d47-93e4-4d0d-9a92-3652474bbf4f.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">React</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/hooks-considered-harmful"><p class="text-xl font-semibold">Hooks Considered Harmful</p><p class="mt-3 text-base text-neutral-60">React hooks changed radically how we build frontend applications allowing engineers to separate stateful logic from rendering. However, under a seemingly simple API there are some aspects of React hooks that are the source of bugs and performance issues. In this article, we will do a deep dive into the javascript internals to help us understand and overcome those pitfalls.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Pau Ramon Revilla</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/bef20d92-e8fb-4db1-ae8e-02100197c6eb.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Pau Ramon Revilla</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/fast-validation-with-ab-testing-in-optimize"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/52da3079-7a5c-4aac-9368-bf2525936333.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Growth</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/fast-validation-with-ab-testing-in-optimize"><p class="text-xl font-semibold">Fast validation with A/B testing in Optimize</p><p class="mt-3 text-base text-neutral-60">Fast iteration and validation are part of the day-to-day activities of Growth teams in Factorial. We need to activate levers of growth to boost our conversion rates through the whole funnel. For that reason, we use Google Optimize for A/B testing, so we can have fast validation and implement those changes that are likely to have a huge impact.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Sergio Mosquera</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/43522f79-8cea-43d0-810e-bc9557a6959d.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Sergio Mosquera</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/react-state-management-with-mobx-pt2"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/87a9f79d-5479-4699-8364-e036a7b6776b.jpeg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">React</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/react-state-management-with-mobx-pt2"><p class="text-xl font-semibold">Mobx Hooks</p><p class="mt-3 text-base text-neutral-60">With the introduction of hooks in React, there have been updates to the way components are written. MobX also leverages this with its hook APIs that give us a functional approach to the way application state is managed in react.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Hameed Damee</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Hameed Damee</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/some-months-working-in-a-utopia"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/c8b0b1a1-327d-4d57-b5bb-36cb786acab4.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/some-months-working-in-a-utopia"><p class="text-xl font-semibold">Some months working in a utopia</p><p class="mt-3 text-base text-neutral-60">Although, Factorial does not identify as an agile company, are its principles similar to that of the agile manifesto? Join Mario as he takes us on this journey of finding out.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Mario Nunes</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/efc89758-8a2a-43cc-b27f-98aea3357238.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Mario Nunes</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/the-role-of-a-product-maker-at-factorial"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/a8d90280-dcd7-4c68-9390-2991f8c29b07.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Product</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/the-role-of-a-product-maker-at-factorial"><p class="text-xl font-semibold">The Role of a Product Maker at Factorial</p><p class="mt-3 text-base text-neutral-60">Take a ride with us as we introduce you to the Product maker role at Factorial, what it entails and why it exists.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Samuel Perez</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/c1c68bce-8080-4d2f-86b9-31d61d80367a.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Samuel Perez</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/react-state-management-with-mobx-pt1"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/b7d40e87-6c49-4fdf-b451-3f358cf4493e.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">React</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/react-state-management-with-mobx-pt1"><p class="text-xl font-semibold">React State Management with MobX</p><p class="mt-3 text-base text-neutral-60">State management is one of the core building blocks of frontend development. This article introduces the use of MobX for state management in a React application.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Hameed Damee</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Hameed Damee</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/how-we-migrated-400k-lines-of-code-from-flow-to-typescript"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/443eacf4-43e6-484c-baa5-c9568ccad140.png"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">TypeScript</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/how-we-migrated-400k-lines-of-code-from-flow-to-typescript"><p class="text-xl font-semibold">How we migrated 400K+ lines of code from Flow to TypeScript</p><p class="mt-3 text-base text-neutral-60">Get a detailed description of how we migrated to TypeScript, the challenges faced and how they were surmounted in order to ensure a safe landing on the other side.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Ferran Basora</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/238445f9-5f1c-4fa8-b149-177fbe404097.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Ferran Basora</p></div></div><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">David Morcillo</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/25862e99-fa3a-4490-808b-38804a8543ac.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">David Morcillo</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/factorial-engineering-culture"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/d951bf1f-ba8d-4c59-8aa5-fa99c90f2d2f.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/factorial-engineering-culture"><p class="text-xl font-semibold">Factorial’s Engineering Culture - A newbie’s perspective</p><p class="mt-3 text-base text-neutral-60">Catch a glimpse of the engineering culture at Factorial. Learn more about how things are done and the impact this culture has had on the engineers over time.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Abiodun Olowode</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/467d1707-8c37-4043-beac-0a669526d2b0.png"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Abiodun Olowode</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/dont-create-leftovers-dcl"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/28492ca4-cd69-4b15-873a-5ac1d994053f.png"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Maintainability</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/dont-create-leftovers-dcl"><p class="text-xl font-semibold">Don't create leftovers (DCL)</p><p class="mt-3 text-base text-neutral-60">Improve the maintainability of your projects detecting this bad pattern in your code.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Ferran Basora</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/238445f9-5f1c-4fa8-b149-177fbe404097.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Ferran Basora</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/a-trick-with-the-ruby-documentation"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/facf5ab5-25a7-4570-b667-da433e2bb966.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Ruby</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/a-trick-with-the-ruby-documentation"><p class="text-xl font-semibold">A trick with the Ruby documentation</p><p class="mt-3 text-base text-neutral-60">Another post in the “Awesome Ruby tricks” series</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Fran C.</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Fran C.</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/why-most-developers-fail-their-first-tech-interviews"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/0995678d-956f-4f64-8b9e-920af47ab019.webp"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Career</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/why-most-developers-fail-their-first-tech-interviews"><p class="text-xl font-semibold">Why most developers fail their first tech interviews</p><p class="mt-3 text-base text-neutral-60">In this post, we will go over the developer recruitment process at Factorial, mostly as an excuse for me to explain what is it that makes so many entry-level candidates flop their interviews, and how you can avoid it.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Gerard</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/e5ebfc24-227a-4f20-b8a9-31c958b5b786.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Gerard</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/a-set-of-programming-aphorisms-at-factorial"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/3950e3cb-6f7c-401c-81f1-f0a8dc7a34ee.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/a-set-of-programming-aphorisms-at-factorial"><p class="text-xl font-semibold">A set of programming aphorisms at Factorial</p><p class="mt-3 text-base text-neutral-60">At ,Factorial,, we maintain an engineering Handbook where we document aspects such as common abstractions, programming principles and documentation of our architecture.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Gerard</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/e5ebfc24-227a-4f20-b8a9-31c958b5b786.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Gerard</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/some-reasons-to-avoid-hashes-in-ruby-and-some-alternatives-to-them"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/cd6f9bc4-86fb-4449-86f6-ffeb8cc98e67.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Ruby</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/some-reasons-to-avoid-hashes-in-ruby-and-some-alternatives-to-them"><p class="text-xl font-semibold">Some reasons to avoid Hashes in Ruby and some alternatives to them.</p><p class="mt-3 text-base text-neutral-60">So, hashes, uh?</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Fran C.</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Fran C.</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/a-handful-of-engineering-principles-at-factorial"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/5f21195a-85a5-4b36-8032-e06f8b972f92.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Culture</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/a-handful-of-engineering-principles-at-factorial"><p class="text-xl font-semibold">A handful of engineering principles at Factorial</p><p class="mt-3 text-base text-neutral-60">Catch a glimpse of some of the Engineering principles adopted at Factorial and why these principles work</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Pau Ramon Revilla</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/bef20d92-e8fb-4db1-ae8e-02100197c6eb.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Pau Ramon Revilla</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/a-trick-with-ruby-anonymous-classes"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/0acce620-a354-47a5-aea5-e2913c24c414.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Ruby</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/a-trick-with-ruby-anonymous-classes"><p class="text-xl font-semibold">A trick with Ruby anonymous classes</p><p class="mt-3 text-base text-neutral-60">Since everything in Ruby is an object it is only normal that classes are objects too. Which means they just have regular constructors with initializers, as any other object would do.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Fran C.</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Fran C.</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/a-trick-with-ruby-hash-new"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/ff61c209-2f9b-45b7-81e6-f1b335276d18.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Ruby</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/a-trick-with-ruby-hash-new"><p class="text-xl font-semibold">A trick with Ruby Hash.new</p><p class="mt-3 text-base text-neutral-60">Hashes are used a lot in Ruby (sometimes even abused). However, they have a very interesting functionality that is rarely used. Find out more in this article.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Fran C.</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Fran C.</p></div></div></div></div></article><article class="flex flex-col"><div class="relative overflow-hidden rounded-lg border border-neutral-20"><a tabindex="-1" class="block" href="/posts/a-trick-with-ruby-array-literals"><div class="will-change-transform"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.25%"></span><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:cover" src="/images/downloaded/cover/e82370e1-5342-4e24-b199-7f3fc31d8050.jpg"/></noscript></span></div><div class="absolute bottom-0 left-0 rounded-tr-lg bg-neutral-20 px-2 py-1 text-sm font-bold text-neutral-100">Ruby</div></a></div><div class="flex flex-1 flex-col justify-between bg-white py-6"><div class="flex-1"><a class="block" href="/posts/a-trick-with-ruby-array-literals"><p class="text-xl font-semibold">A trick with Ruby array literals</p><p class="mt-3 text-base text-neutral-60">Learn how to save array elements as variables the same time you declare them and the scenarios in which this might come in handy.</p></a></div><div class="mt-6 flex flex-row gap-x-4"><div class="flex items-center"><div class="flex-shrink-0"><span class="sr-only">Fran C.</span><div class="relative h-10 w-10 rounded-full"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:absolute;top:0;left:0;bottom:0;right:0"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fill" class="rounded-full object-cover" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="rounded-full object-cover" src="/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg"/></noscript></span></div></div><div class="ml-3"><p class="text-neutral-600 text-sm font-medium">Fran C.</p></div></div></div></div></article></div></div></div></div></main></div></div><div class="bg-neutral-10"><div class="relative mx-auto w-full max-w-7xl px-4 md:px-6 lg:px-8 flex py-8"><div class="flex-1">Made with <span class="mx-1 inline-block">❤️</span> by<!-- --> <a href="https://factorialhr.com" class="text-viridian-100 transition-colors hover:underline undefined">Factorial's</a> Team</div><div><a href="/rss.xml" class="relative h-2 w-2" title="Subscribe to our RSS feed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 455.731 455.731" xml:space="preserve" style="width:1.2em;height:1.2em"><path fill="#f78422" d="M0 0h455.731v455.731H0z"></path><path fill="#fff" d="M296.208 159.16C234.445 97.397 152.266 63.382 64.81 63.382v64.348c70.268 0 136.288 27.321 185.898 76.931 49.609 49.61 76.931 115.63 76.931 185.898h64.348c-.001-87.456-34.016-169.636-95.779-231.399z"></path><path fill="#fff" d="M64.143 172.273v64.348c84.881 0 153.938 69.056 153.938 153.939h64.348c0-120.364-97.922-218.287-218.286-218.287z"></path><circle fill="#fff" cx="109.833" cy="346.26" r="46.088"></circle></svg></a></div></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"posts":[{"id":"2e11f350-5508-47c6-821b-42f76b169abe","title":"Optimize for Inspiration","slug":"optimize-for-inspiration","description":"Is your team inspired or uninspired? Learn about their traits and what to do about them.","published":true,"cover":"/images/downloaded/cover/2e11f350-5508-47c6-821b-42f76b169abe.jpg","date":"2024-01-22T00:00:00.000Z","authors":[{"name":"Josep Jaume","imageUrl":"/images/downloaded/author/1b6480a6-0c27-46de-9f7a-421d214441de.jpeg","tagline":"Passionate about building stuff","bio":"I am a tinkerer, a perfectionist, and also an easily distracted mind. Things that not really play well together. Currently Senior Staff Engineer at Factorial.","role":"Senior Staff Engineer","github":"josepjaume","twitter":"josepjaume","webpage":null}],"category":"Culture","canonical":null},{"id":"6a7d32f0-379f-4bf6-a0fb-fe6476b7b97f","title":"Engineering Lessons From Football: Scoring Goals in the Game of Collaboration","slug":"engineering-lessons-from-football","description":"A delve into the intersection of football dynamics and the world of engineering, drawing parallels that illuminate essential principles for effective teamwork and professional growth. Through vivid comparisons to football gameplay, we explore how strategies employed on the field align with collaborative approaches within engineering teams. From emphasizing the significance of teamwork over individual brilliance to tackling conflicts of ideas rather than personalities, each analogy unlocks invaluable lessons applicable to software development and team dynamics","published":true,"cover":"/images/downloaded/cover/6a7d32f0-379f-4bf6-a0fb-fe6476b7b97f.jpg","date":"2023-12-18T00:00:00.000Z","authors":[{"name":"Abiodun Olowode","imageUrl":"/images/downloaded/author/467d1707-8c37-4043-beac-0a669526d2b0.png","tagline":null,"bio":"Abiodun, previously a senior developer across core teams and DX initiatives at Factorial, is currently the engineering manager of the People Performance Team. She has a knack for unriddling complex topics and during her spare time, she loves to binge-watch movies and read anything interesting (mostly about UFOs and ETs). ","role":"Senior Engineering Manager","github":"https://github.com/Tripple-A","twitter":"https://x.com/thedevaphorist","webpage":null}],"category":"Career","canonical":null},{"id":"9deb45d9-a943-460a-887f-38958b0f8dcf","title":"Revolutionizing My Retrospectives: How I Transformed My Process and Results","slug":"revolutionizing-my-retrospectives","description":"","published":true,"cover":"/images/downloaded/cover/9deb45d9-a943-460a-887f-38958b0f8dcf.jpg","date":"2023-05-01T00:00:00.000Z","authors":[{"name":"Marina Planells","imageUrl":"/images/downloaded/author/c373fa5c-d0e4-48b6-ab17-39f00bf7db6a.jpg","tagline":null,"bio":"She is the Engineering Manager of Payroll-professionals-experience team here at Factorial. After work, she can be found reading, with her bullet journal, listening to music, playing board games, doing escape rooms, paddle surfing, … (She could go on, but she simply doesn't have enough time for all her hobbies)","role":"Engineering Manager","github":null,"twitter":"https://twitter.com/marinaplanells","webpage":null}],"category":"Culture","canonical":null},{"id":"03cb81e3-32d1-4060-929d-dc50d4e03eeb","title":"Factorial's frontend journey to Vite","slug":"from-webpack-to-vite","description":"Marc takes us on a journey from Factorial’s use of webpack, challenges faced, the investigation for a replacement, the solution proffered and the team’s adoption of this profferred solution. Get ready for a great ride!","published":true,"cover":"/images/downloaded/cover/03cb81e3-32d1-4060-929d-dc50d4e03eeb.jpg","date":"2023-01-16T00:00:00.000Z","authors":[{"name":"Marc Torrelles","imageUrl":"/images/downloaded/author/e01c13aa-bf63-4120-990d-4bd2386c2c59.png","tagline":null,"bio":"Marc is a Software Engineer working at Factorial in the Developer Experience team. He likes cats, video games and electronic music.","role":"Staff Software Engineer","github":"https://github.com/marctorrelles","twitter":"https://twitter.com/marctorrelles","webpage":"https://marctorrelles.dev"}],"category":"Developer Experience","canonical":null},{"id":"62744a6a-6c17-4f18-a0ff-b3e6b1a50434","title":"Belonging and the return of love.","slug":"belonging-and-the-return-of-love","description":"Employees are at their best when they feel that they belong in the organization. Belonging is vital to performance, innovation, and retention. Let’s delve deeper into this topic and why this is good for business.","published":true,"cover":"/images/downloaded/cover/62744a6a-6c17-4f18-a0ff-b3e6b1a50434.jpg","date":"2025-02-12T00:00:00.000Z","authors":[{"name":"Ray Garcia","imageUrl":"/images/downloaded/author/afaa428e-a4d5-4495-8040-77726f266ea8.jpg","tagline":null,"bio":"Ray’s an Engineering Manager at Factorial. He says he loves technology and solving problems but we are not sure he can do that. He is a very sociable person that never goes out of his house. He also writes and has published two science fiction novels.","role":"Engineering Manager","github":"https://github.com/rayoplateado","twitter":"https://twitter.com/rayoplateado","webpage":"https://launicaverdad.com"}],"category":"Culture","canonical":null},{"id":"b10aab75-67e8-4897-b777-9d0a0683711f","title":"LeadDev Berlin wrap-up","slug":"leaddev-berlin-2022","description":"Part of our team went to LeadDev Berlin 2022. This article is the highlights of the 2 days of the conference for Garance, through her favorite talks!","published":true,"cover":"/images/downloaded/cover/b10aab75-67e8-4897-b777-9d0a0683711f.jpg","date":"2022-11-28T00:00:00.000Z","authors":[{"name":"Garance Vallat","imageUrl":"/images/downloaded/author/cffdb5f5-9f93-42d5-8ebf-7dce30fe579e.png","tagline":null,"bio":"Garance’s days at work are about leading others to success: in her teams in particular, and in the wider engineering organization in general. When she’s not working, you’ll have better chances of finding her hiking in the Pyrenees mountains than in front of a laptop.","role":"Senior Engineering Manager","github":null,"twitter":"https://twitter.com/GaranceVallat","webpage":null}],"category":"Growth","canonical":null},{"id":"a96a1f13-362f-41b5-8b4f-e93620b348d2","title":"Discoveries of a Junior software developer","slug":"discoveries-of-a-junior-software-developer","description":"Being a junior software developer on its own is an experience. Knowledge unfolds, and discoveries are made. Yara shares a personal experience that many junior developers can relate to.","published":true,"cover":"/images/downloaded/cover/a96a1f13-362f-41b5-8b4f-e93620b348d2.jpg","date":"2022-11-21T00:00:00.000Z","authors":[{"name":"Yara Debian","imageUrl":"/images/downloaded/author/019eea3b-bb93-4358-b959-a9df9ad48116.jpg","tagline":null,"bio":"Yara is a mid software engineer at Factorial’s Core Identity team. She’s interested in productivity hacks with work or life in general. On her free time she enjoys long walks and trying new random hobbies. ","role":"Mid Software Engineer","github":null,"twitter":null,"webpage":null}],"category":"Career","canonical":null},{"id":"5aa4af47-3a01-4eed-b4cb-af984dc42b1b","title":"Business Intelligence as a service — a journey","slug":"business-intelligence-as-a-service","description":"Your customers call, and they want their data back. How can you give them access without compromising your release cycle, blowing up operations, or breaking the bank? In this article, you can learn about our journey through a couple of iterations, technical details, and all.","published":true,"cover":"/images/downloaded/cover/5aa4af47-3a01-4eed-b4cb-af984dc42b1b.jpg","date":"2022-10-17T00:00:00.000Z","authors":[{"name":"Txus Bach","imageUrl":"/images/downloaded/author/c54da30b-a151-4959-adad-68b77c7baa41.jpg","tagline":null,"bio":"Txus is a software engineer at Factorial’s Core Identity team. He enjoys solving tricky problems with software, learning unfamiliar languages (programming or natural), and watching paint dry —I mean watching machines learn by themselves.","role":"Senior Staff Engineer","github":"https://github.com/txus","twitter":null,"webpage":null}],"category":"Data","canonical":null},{"id":"8b9b3aa6-d54c-4b01-8699-2b5fc1677f26","title":"How we merged our main repositories into a single monorepo","slug":"how-we-merged-our-main-repositories-into-a-single-monorepo","description":"Get a detailed description of how we merged our main repositories into a single monorepo - the reasons, considerations, dos and don’ts, challenges, and wins.","published":true,"cover":"/images/downloaded/cover/8b9b3aa6-d54c-4b01-8699-2b5fc1677f26.jpg","date":"2022-09-19T00:00:00.000Z","authors":[{"name":"Ferran Basora","imageUrl":"/images/downloaded/author/238445f9-5f1c-4fa8-b149-177fbe404097.jpg","tagline":"We need a tool ™","bio":"Ferran is a software engineer at Factorial, currently working on the Developer Experience team. He loves to play with all kinds of stuff related to computers and is an open-source enthusiast.","role":"Staff Software Engineer","github":"https://github.com/fcsonline/","twitter":"https://twitter.com/openfcsonline","webpage":"https://ferranbasora.com/"},{"name":"David Morcillo","imageUrl":"/images/downloaded/author/25862e99-fa3a-4490-808b-38804a8543ac.jpg","tagline":null,"bio":"David is a passionate software engineer that loves to put code examples using dogs and cats. You can also ask him about any board game. He’s currently working at Factorial in the Developer Experience team.","role":"Staff Software Engineer","github":"https://github.com/beagleknight","twitter":"https://twitter.com/beagleknight","webpage":"https://beagleknight.com"}],"category":"Maintainability","canonical":null},{"id":"808b8685-8c10-4f25-9e82-0645f04d1381","title":"What are embeddings, really?","slug":"what-are-embeddings-really","description":"How can AIs manipulate abstract concepts? In this article, we’ll develop our knowledge about embeddings, a powerful technique behind AIs today.","published":true,"cover":"/images/downloaded/cover/808b8685-8c10-4f25-9e82-0645f04d1381.jpg","date":"2022-08-15T00:00:00.000Z","authors":[{"name":"Txus Bach","imageUrl":"/images/downloaded/author/c54da30b-a151-4959-adad-68b77c7baa41.jpg","tagline":null,"bio":"Txus is a software engineer at Factorial’s Core Identity team. He enjoys solving tricky problems with software, learning unfamiliar languages (programming or natural), and watching paint dry —I mean watching machines learn by themselves.","role":"Senior Staff Engineer","github":"https://github.com/txus","twitter":null,"webpage":null}],"category":"AI","canonical":null},{"id":"8d85c87c-b9bf-4b41-9de2-e26a48c12913","title":"How my 2-year-old daughter taught me a valuable Product-Management lesson","slug":"product-management-lesson-from-daughter","description":"A personal story about the nuances and subtle details we tend to overlook during communication/understanding, hence, making it ineffective, and how this relates to Product Management.","published":true,"cover":"/images/downloaded/cover/8d85c87c-b9bf-4b41-9de2-e26a48c12913.jpg","date":"2022-08-08T00:00:00.000Z","authors":[{"name":"Paulo Ávila","imageUrl":"/images/downloaded/author/a1790c59-48f5-4ea1-887c-274de5eda1a9.jpg","tagline":"sociable introvert","bio":"Paulo leads one of our product groups at Factorial. He likes photography and building things with his hands both “in the cloud” and down here on earth. He appreciates intelligent humour, cold milk, and a neatly arranged desktop.","role":"Product Lead","github":"https://github.com/demoive","twitter":null,"webpage":"https://www.flickr.com/photos/lotsofcrazycharacters/"}],"category":"Product","canonical":null},{"id":"75260c44-494e-4f5c-8a4f-36cfb0e32902","title":"Sneak Peek Behind the Scenes of MobX","slug":"sneak-peek-behind-the-scenes-of-mobx","description":"In the first three chapters of the MobX series, we have demonstrated how MobX works. However, in this chapter, we focus a little on how MobX works under the hood. What makes it tick you might say? How does MobX handle state changes internally?","published":true,"cover":"/images/downloaded/cover/75260c44-494e-4f5c-8a4f-36cfb0e32902.jpeg","date":"2022-06-20T00:00:00.000Z","authors":[{"name":"Hameed Damee","imageUrl":"/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png","tagline":null,"bio":"Hameed Damee is a software engineer at Factorial working on the Payroll Core Team. He has a passion for creating solutions that change the world around him. In his spare time, he loves travelling and experiencing new places.","role":"Mid Software Engineer","github":"https://github.com/hameeddamee","twitter":"https://twitter.com/hameeddamee","webpage":null},{"name":"Pau Ramon Revilla","imageUrl":"/images/downloaded/author/bef20d92-e8fb-4db1-ae8e-02100197c6eb.jpg","tagline":null,"bio":"Pau Ramon is Factorial’s CTO and co-founder. He likes people and computers, in that order.","role":"CTO","github":"https://github.com/masylum/","twitter":"https://twitter.com/masylum","webpage":null}],"category":"MobX","canonical":null},{"id":"71a109e9-65cf-4b23-86d8-fef8ab633f5e","title":"The N+1 Dilemma - Bullet or Prosopite?","slug":"bullet-or-prosopite-for-nplus1","description":"Improving the performance of any Ruby application usually entails fixing N+1 queries. In this article, we’ll find out how well the Bullet and Prosopite gem perform in identifying the existence of these N+1 queries. ","published":true,"cover":"/images/downloaded/cover/71a109e9-65cf-4b23-86d8-fef8ab633f5e.jpg","date":"2022-05-23T00:00:00.000Z","authors":[{"name":"Abiodun Olowode","imageUrl":"/images/downloaded/author/467d1707-8c37-4043-beac-0a669526d2b0.png","tagline":null,"bio":"Abiodun, previously a senior developer across core teams and DX initiatives at Factorial, is currently the engineering manager of the People Performance Team. She has a knack for unriddling complex topics and during her spare time, she loves to binge-watch movies and read anything interesting (mostly about UFOs and ETs). ","role":"Senior Engineering Manager","github":"https://github.com/Tripple-A","twitter":"https://x.com/thedevaphorist","webpage":null}],"category":"Ruby","canonical":null},{"id":"b51846f8-11ec-4bfc-9e63-1f443bd8b51a","title":"Async Action with MobX","slug":"async-action-with-mobx","description":"This article introduces the usage of asynchronous methods in mobx. Interacting with APIs is a major aspect of frontend development, hence the need for asynchronous calls. The article shows how async calls can be handled in mobx","published":true,"cover":"/images/downloaded/cover/b51846f8-11ec-4bfc-9e63-1f443bd8b51a.jpeg","date":"2022-04-28T00:00:00.000Z","authors":[{"name":"Hameed Damee","imageUrl":"/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png","tagline":null,"bio":"Hameed Damee is a software engineer at Factorial working on the Payroll Core Team. He has a passion for creating solutions that change the world around him. In his spare time, he loves travelling and experiencing new places.","role":"Mid Software Engineer","github":"https://github.com/hameeddamee","twitter":"https://twitter.com/hameeddamee","webpage":null}],"category":"React","canonical":null},{"id":"3047c7e5-f2c4-4530-b6ba-a32de9a8a145","title":"The epiphany: From Individual Contributor to Engineering Manager (and back)","slug":"the-epiphany-from-individual-contributor-to-manager","description":"This article gives us insight into the path of an engineer in Factorial who went from an individual contributor position, to an Engineering manager, what helped him, what he learned, and what he took back as he transitioned back into the role of an individual contributor.","published":true,"cover":"/images/downloaded/cover/3047c7e5-f2c4-4530-b6ba-a32de9a8a145.jpg","date":"2022-04-19T00:00:00.000Z","authors":[{"name":"Omar Sotillo Franco","imageUrl":"/images/downloaded/author/65ed50e7-d2d7-43c6-b340-13ad30b3c783.png","tagline":"revert","bio":"I'm a 27-year-old Spanish Senior Software Engineer living in Berlin, Germany 🇩🇪 Currently increasing the CodePain in the Platform: Customization team","role":"Senior Software Engineer","github":"https://github.com/omarsotillo","twitter":"https://twitter.com/geiloco","webpage":"http://omar.geilo.co/"}],"category":"Culture","canonical":null},{"id":"76eb6916-47db-4b22-8aa2-c8c05b489e8b","title":"Demystifying the JavaScript call stack","slug":"demystifying-the-javascript-call-stack","description":"At the most basic level, the call stack is a data structure that utilizes the Last in, First out(LIFO) principle to store and manage function invocations. This article would serve as a deep dive into how this piece of technology works in JavaScript.","published":true,"cover":"/images/downloaded/cover/76eb6916-47db-4b22-8aa2-c8c05b489e8b.webp","date":"2022-04-04T00:00:00.000Z","authors":[{"name":"Johnson Ogwuru","imageUrl":"/images/downloaded/author/d784355c-883c-435e-ab6b-e39c71232b6e.png","tagline":null,"bio":"Johnson is a Software Engineer at Factorial. He loves taking code to production and the “god feeling” he gets when people are served by his innovation. ","role":"Senior Software Engineer","github":"https://github.com/ogwurujohnson","twitter":"https://twitter.com/devopsjay","webpage":null}],"category":"Javascript","canonical":"https://dev.to/ogwurujohnson/demystifying-the-javascript-call-stack-1ppc"},{"id":"b5fb9d47-93e4-4d0d-9a92-3652474bbf4f","title":"Hooks Considered Harmful","slug":"hooks-considered-harmful","description":"React hooks changed radically how we build frontend applications allowing engineers to separate stateful logic from rendering. However, under a seemingly simple API there are some aspects of React hooks that are the source of bugs and performance issues. In this article, we will do a deep dive into the javascript internals to help us understand and overcome those pitfalls.","published":true,"cover":"/images/downloaded/cover/b5fb9d47-93e4-4d0d-9a92-3652474bbf4f.jpg","date":"2022-03-21T00:00:00.000Z","authors":[{"name":"Pau Ramon Revilla","imageUrl":"/images/downloaded/author/bef20d92-e8fb-4db1-ae8e-02100197c6eb.jpg","tagline":null,"bio":"Pau Ramon is Factorial’s CTO and co-founder. He likes people and computers, in that order.","role":"CTO","github":"https://github.com/masylum/","twitter":"https://twitter.com/masylum","webpage":null}],"category":"React","canonical":null},{"id":"52da3079-7a5c-4aac-9368-bf2525936333","title":"Fast validation with A/B testing in Optimize","slug":"fast-validation-with-ab-testing-in-optimize","description":"Fast iteration and validation are part of the day-to-day activities of Growth teams in Factorial. We need to activate levers of growth to boost our conversion rates through the whole funnel. For that reason, we use Google Optimize for A/B testing, so we can have fast validation and implement those changes that are likely to have a huge impact.","published":true,"cover":"/images/downloaded/cover/52da3079-7a5c-4aac-9368-bf2525936333.jpg","date":"2022-03-14T00:00:00.000Z","authors":[{"name":"Sergio Mosquera","imageUrl":"/images/downloaded/author/43522f79-8cea-43d0-810e-bc9557a6959d.jpg","tagline":null,"bio":"Sergio is a growth engineer in the Growth Team (unexpected). You can find him in the office on Thursdays, otherwise he’ll be working from home wearing his blue robe. He enjoys music in general, but specially interested on classical and edm, he always tries to improve things, and make his workmates happier 🙂","role":"Growth Engineer","github":"https://github.com/SergioMD15","twitter":null,"webpage":"https://sergio-mosquera.com"}],"category":"Growth","canonical":null},{"id":"87a9f79d-5479-4699-8364-e036a7b6776b","title":"Mobx Hooks","slug":"react-state-management-with-mobx-pt2","description":"With the introduction of hooks in React, there have been updates to the way components are written. MobX also leverages this with its hook APIs that give us a functional approach to the way application state is managed in react.","published":true,"cover":"/images/downloaded/cover/87a9f79d-5479-4699-8364-e036a7b6776b.jpeg","date":"2022-03-07T00:00:00.000Z","authors":[{"name":"Hameed Damee","imageUrl":"/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png","tagline":null,"bio":"Hameed Damee is a software engineer at Factorial working on the Payroll Core Team. He has a passion for creating solutions that change the world around him. In his spare time, he loves travelling and experiencing new places.","role":"Mid Software Engineer","github":"https://github.com/hameeddamee","twitter":"https://twitter.com/hameeddamee","webpage":null}],"category":"React","canonical":null},{"id":"c8b0b1a1-327d-4d57-b5bb-36cb786acab4","title":"Some months working in a utopia","slug":"some-months-working-in-a-utopia","description":"Although, Factorial does not identify as an agile company, are its principles similar to that of the agile manifesto? Join Mario as he takes us on this journey of finding out.","published":true,"cover":"/images/downloaded/cover/c8b0b1a1-327d-4d57-b5bb-36cb786acab4.jpg","date":"2022-02-28T00:00:00.000Z","authors":[{"name":"Mario Nunes","imageUrl":"/images/downloaded/author/efc89758-8a2a-43cc-b27f-98aea3357238.jpg","tagline":null,"bio":"Mario Nunes is an Engineering Manager working on the Business Operations team. He likes music from Heavy Metal to Techno and hiking with his dog, losing themselves in the mountains.","role":"Engineering Manager","github":"https://github.com/mariotux","twitter":"https://twitter.com/mariotux","webpage":"http://marionunes.com"}],"category":"Culture","canonical":null},{"id":"a8d90280-dcd7-4c68-9390-2991f8c29b07","title":"The Role of a Product Maker at Factorial","slug":"the-role-of-a-product-maker-at-factorial","description":"Take a ride with us as we introduce you to the Product maker role at Factorial, what it entails and why it exists.","published":true,"cover":"/images/downloaded/cover/a8d90280-dcd7-4c68-9390-2991f8c29b07.jpg","date":"2022-02-21T00:00:00.000Z","authors":[{"name":"Samuel Perez","imageUrl":"/images/downloaded/author/c1c68bce-8080-4d2f-86b9-31d61d80367a.jpg","tagline":null,"bio":"Samuel is Product maker at Factorial working on the Platform Teams. You can find him eating the breakfast we serve at the office, trying to help other teams, and discovering new tools, podcasts, or his hidden enthusiasm for learning to code.","role":"Product Maker","github":null,"twitter":null,"webpage":null}],"category":"Product","canonical":null},{"id":"b7d40e87-6c49-4fdf-b451-3f358cf4493e","title":"React State Management with MobX","slug":"react-state-management-with-mobx-pt1","description":"State management is one of the core building blocks of frontend development. This article introduces the use of MobX for state management in a React application.","published":true,"cover":"/images/downloaded/cover/b7d40e87-6c49-4fdf-b451-3f358cf4493e.jpg","date":"2022-02-14T00:00:00.000Z","authors":[{"name":"Hameed Damee","imageUrl":"/images/downloaded/author/3c9405ae-3806-4726-850d-8556cd7eb46f.png","tagline":null,"bio":"Hameed Damee is a software engineer at Factorial working on the Payroll Core Team. He has a passion for creating solutions that change the world around him. In his spare time, he loves travelling and experiencing new places.","role":"Mid Software Engineer","github":"https://github.com/hameeddamee","twitter":"https://twitter.com/hameeddamee","webpage":null}],"category":"React","canonical":null},{"id":"443eacf4-43e6-484c-baa5-c9568ccad140","title":"How we migrated 400K+ lines of code from Flow to TypeScript","slug":"how-we-migrated-400k-lines-of-code-from-flow-to-typescript","description":"Get a detailed description of how we migrated to TypeScript, the challenges faced and how they were surmounted in order to ensure a safe landing on the other side.","published":true,"cover":"/images/downloaded/cover/443eacf4-43e6-484c-baa5-c9568ccad140.png","date":"2022-02-07T00:00:00.000Z","authors":[{"name":"Ferran Basora","imageUrl":"/images/downloaded/author/238445f9-5f1c-4fa8-b149-177fbe404097.jpg","tagline":"We need a tool ™","bio":"Ferran is a software engineer at Factorial, currently working on the Developer Experience team. He loves to play with all kinds of stuff related to computers and is an open-source enthusiast.","role":"Staff Software Engineer","github":"https://github.com/fcsonline/","twitter":"https://twitter.com/openfcsonline","webpage":"https://ferranbasora.com/"},{"name":"David Morcillo","imageUrl":"/images/downloaded/author/25862e99-fa3a-4490-808b-38804a8543ac.jpg","tagline":null,"bio":"David is a passionate software engineer that loves to put code examples using dogs and cats. You can also ask him about any board game. He’s currently working at Factorial in the Developer Experience team.","role":"Staff Software Engineer","github":"https://github.com/beagleknight","twitter":"https://twitter.com/beagleknight","webpage":"https://beagleknight.com"}],"category":"TypeScript","canonical":null},{"id":"d951bf1f-ba8d-4c59-8aa5-fa99c90f2d2f","title":"Factorial’s Engineering Culture - A newbie’s perspective","slug":"factorial-engineering-culture","description":"Catch a glimpse of the engineering culture at Factorial. Learn more about how things are done and the impact this culture has had on the engineers over time.","published":true,"cover":"/images/downloaded/cover/d951bf1f-ba8d-4c59-8aa5-fa99c90f2d2f.jpg","date":"2022-01-31T00:00:00.000Z","authors":[{"name":"Abiodun Olowode","imageUrl":"/images/downloaded/author/467d1707-8c37-4043-beac-0a669526d2b0.png","tagline":null,"bio":"Abiodun, previously a senior developer across core teams and DX initiatives at Factorial, is currently the engineering manager of the People Performance Team. She has a knack for unriddling complex topics and during her spare time, she loves to binge-watch movies and read anything interesting (mostly about UFOs and ETs). ","role":"Senior Engineering Manager","github":"https://github.com/Tripple-A","twitter":"https://x.com/thedevaphorist","webpage":null}],"category":"Culture","canonical":null},{"id":"28492ca4-cd69-4b15-873a-5ac1d994053f","title":"Don't create leftovers (DCL)","slug":"dont-create-leftovers-dcl","description":"Improve the maintainability of your projects detecting this bad pattern in\nyour code.","published":true,"cover":"/images/downloaded/cover/28492ca4-cd69-4b15-873a-5ac1d994053f.png","date":"2020-11-26T00:00:00.000Z","authors":[{"name":"Ferran Basora","imageUrl":"/images/downloaded/author/238445f9-5f1c-4fa8-b149-177fbe404097.jpg","tagline":"We need a tool ™","bio":"Ferran is a software engineer at Factorial, currently working on the Developer Experience team. He loves to play with all kinds of stuff related to computers and is an open-source enthusiast.","role":"Staff Software Engineer","github":"https://github.com/fcsonline/","twitter":"https://twitter.com/openfcsonline","webpage":"https://ferranbasora.com/"}],"category":"Maintainability","canonical":"https://ferranbasora.com/posts/dont-create-leftovers"},{"id":"facf5ab5-25a7-4570-b667-da433e2bb966","title":"A trick with the Ruby documentation","slug":"a-trick-with-the-ruby-documentation","description":"Another post in the “Awesome Ruby tricks” series","published":true,"cover":"/images/downloaded/cover/facf5ab5-25a7-4570-b667-da433e2bb966.jpg","date":"2020-07-28T00:00:00.000Z","authors":[{"name":"Fran C.","imageUrl":"/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg","tagline":null,"bio":"I break code for a living... wait no, I fix it, most of the time. Well, sometimes. Yeah, I break code for a living.","role":"Staff Software Engineer","github":"https://github.com/franciscoj","twitter":"https://twitter.com/nflamel","webpage":"https://fjcasas.es/"}],"category":"Ruby","canonical":null},{"id":"0995678d-956f-4f64-8b9e-920af47ab019","title":"Why most developers fail their first tech interviews","slug":"why-most-developers-fail-their-first-tech-interviews","description":"In this post, we will go over the developer recruitment process at Factorial, mostly as an excuse for me to explain what is it that makes so many entry-level candidates flop their interviews, and how you can avoid it.","published":true,"cover":"/images/downloaded/cover/0995678d-956f-4f64-8b9e-920af47ab019.webp","date":"2020-05-11T00:00:00.000Z","authors":[{"name":"Gerard","imageUrl":"/images/downloaded/author/e5ebfc24-227a-4f20-b8a9-31c958b5b786.jpg","tagline":null,"bio":null,"role":"Staff Software Engineer","github":"https://github.com/geclos/","twitter":"https://twitter.com/geclos","webpage":"https://gerardclos.com/"}],"category":"Career","canonical":"https://gerardclos.com/why_most_developers_fail_their_first_tech_interviews/"},{"id":"3950e3cb-6f7c-401c-81f1-f0a8dc7a34ee","title":"A set of programming aphorisms at Factorial","slug":"a-set-of-programming-aphorisms-at-factorial","description":"At ,Factorial,, we maintain an engineering Handbook where we document aspects such as common abstractions, programming principles and documentation of our architecture.","published":true,"cover":"/images/downloaded/cover/3950e3cb-6f7c-401c-81f1-f0a8dc7a34ee.jpg","date":"2020-04-15T00:00:00.000Z","authors":[{"name":"Gerard","imageUrl":"/images/downloaded/author/e5ebfc24-227a-4f20-b8a9-31c958b5b786.jpg","tagline":null,"bio":null,"role":"Staff Software Engineer","github":"https://github.com/geclos/","twitter":"https://twitter.com/geclos","webpage":"https://gerardclos.com/"}],"category":"Culture","canonical":null},{"id":"cd6f9bc4-86fb-4449-86f6-ffeb8cc98e67","title":"Some reasons to avoid Hashes in Ruby and some alternatives to them.","slug":"some-reasons-to-avoid-hashes-in-ruby-and-some-alternatives-to-them","description":"So, hashes, uh?","published":true,"cover":"/images/downloaded/cover/cd6f9bc4-86fb-4449-86f6-ffeb8cc98e67.jpg","date":"2020-03-16T00:00:00.000Z","authors":[{"name":"Fran C.","imageUrl":"/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg","tagline":null,"bio":"I break code for a living... wait no, I fix it, most of the time. Well, sometimes. Yeah, I break code for a living.","role":"Staff Software Engineer","github":"https://github.com/franciscoj","twitter":"https://twitter.com/nflamel","webpage":"https://fjcasas.es/"}],"category":"Ruby","canonical":"https://dev.to/factorial/some-reasons-to-avoid-hashes-in-ruby-and-some-alternatives-to-them-3j7n"},{"id":"5f21195a-85a5-4b36-8032-e06f8b972f92","title":"A handful of engineering principles at Factorial","slug":"a-handful-of-engineering-principles-at-factorial","description":"Catch a glimpse of some of the Engineering principles adopted at Factorial and why these principles work","published":true,"cover":"/images/downloaded/cover/5f21195a-85a5-4b36-8032-e06f8b972f92.jpg","date":"2020-02-18T00:00:00.000Z","authors":[{"name":"Pau Ramon Revilla","imageUrl":"/images/downloaded/author/bef20d92-e8fb-4db1-ae8e-02100197c6eb.jpg","tagline":null,"bio":"Pau Ramon is Factorial’s CTO and co-founder. He likes people and computers, in that order.","role":"CTO","github":"https://github.com/masylum/","twitter":"https://twitter.com/masylum","webpage":null}],"category":"Culture","canonical":"https://dev.to/factorial/a-handful-of-engineering-principles-at-factorial-344"},{"id":"0acce620-a354-47a5-aea5-e2913c24c414","title":"A trick with Ruby anonymous classes","slug":"a-trick-with-ruby-anonymous-classes","description":"Since everything in Ruby is an object it is only normal that classes are objects too. Which means they just have regular constructors with initializers, as any other object would do.","published":true,"cover":"/images/downloaded/cover/0acce620-a354-47a5-aea5-e2913c24c414.jpg","date":"2020-02-14T00:00:00.000Z","authors":[{"name":"Fran C.","imageUrl":"/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg","tagline":null,"bio":"I break code for a living... wait no, I fix it, most of the time. Well, sometimes. Yeah, I break code for a living.","role":"Staff Software Engineer","github":"https://github.com/franciscoj","twitter":"https://twitter.com/nflamel","webpage":"https://fjcasas.es/"}],"category":"Ruby","canonical":"https://dev.to/factorial/a-trick-with-ruby-anonymous-classes-11pp"},{"id":"ff61c209-2f9b-45b7-81e6-f1b335276d18","title":"A trick with Ruby Hash.new","slug":"a-trick-with-ruby-hash-new","description":"Hashes are used a lot in Ruby (sometimes even abused). However, they have a very interesting functionality that is rarely used. Find out more in this article.","published":true,"cover":"/images/downloaded/cover/ff61c209-2f9b-45b7-81e6-f1b335276d18.jpg","date":"2020-02-12T00:00:00.000Z","authors":[{"name":"Fran C.","imageUrl":"/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg","tagline":null,"bio":"I break code for a living... wait no, I fix it, most of the time. Well, sometimes. Yeah, I break code for a living.","role":"Staff Software Engineer","github":"https://github.com/franciscoj","twitter":"https://twitter.com/nflamel","webpage":"https://fjcasas.es/"}],"category":"Ruby","canonical":"https://dev.to/factorial/a-trick-with-ruby-hash-new-2ma0"},{"id":"e82370e1-5342-4e24-b199-7f3fc31d8050","title":"A trick with Ruby array literals","slug":"a-trick-with-ruby-array-literals","description":"Learn how to save array elements as variables the same time you declare them and the scenarios in which this might come in handy.","published":true,"cover":"/images/downloaded/cover/e82370e1-5342-4e24-b199-7f3fc31d8050.jpg","date":"2020-02-10T00:00:00.000Z","authors":[{"name":"Fran C.","imageUrl":"/images/downloaded/author/6a9d4960-7802-48fa-adfb-4c95cc5d7d33.jpg","tagline":null,"bio":"I break code for a living... wait no, I fix it, most of the time. Well, sometimes. Yeah, I break code for a living.","role":"Staff Software Engineer","github":"https://github.com/franciscoj","twitter":"https://twitter.com/nflamel","webpage":"https://fjcasas.es/"}],"category":"Ruby","canonical":"https://dev.to/factorial/a-trick-with-ruby-array-literals-ha8"}]},"__N_SSG":true},"page":"/","query":{},"buildId":"4yujYJZpvLDUixRdlcc-d","isFallback":false,"gsp":true,"scriptLoader":[]}</script><script> </script></body></html>