Outlook
3 tools I used to build FATA.school
Co-Founder
Today is the 3 month anniversary of my last day at Shopify. Leaving Shopify wasn’t an easy decision, I had been working there for 7.5 years. I had seen tremendous growth both in the company and in myself. I had met so many amazing people, some of which had become close friends.
Shopify gave me the entrepreneurship bug. So when my sister Oumie told me about her idea to create FATA.school, a new programming school to help give equal access to digital entrepreneurship to African youth, I took the big leap and resigned.
I used to be a teacher. I have always been passionate about learning and development. It’s clear to me there is a big opportunity to create much more engaging and effective training programs in software development. More on this soon.
In this post I want to focus on telling you about the tools I discovered while building FATA.school and how they made me about twice as productive.
Developer tooling
When I joined Shopify in 2015 I was blown away by the quality of the developer tooling I got access to. Setting up my local development environment, provisioning servers or shipping code to production was fully automated and 100% self-serve. This enabled the R&D team to ship hundreds of times per day while scaling very quickly (from ~250 developers when I joined to ~4000 when I left). That was a huge boost in productivity compared to what I was used to. The tooling kept getting better over the years, so I was fully expecting to miss this environment when I left, but that didn’t happen.
Instead, I discovered that what used to be a big competitive advantage for big tech companies has now been fully commoditized and is available to everyone around the world for free. I’ve deployed FATA.school on Fly.io, deno.land and cloudflare.pages which all leverage Github actions to provide a fully automated continuous deployment pipeline on every git push.
In fact the deployment pipeline on deno.land and cloudflare is an order of magnitude faster than anything I had seen before, it literally took seconds to go from my laptop to production. That completely changes the game as you never have to wait for deployment.
I used github codespaces which completely automate development environment setup. Even better, thanks to VSCode for the Web, early on while I was waiting for my new laptop to arrive, I was able to start coding on my wife’s computer without installing anything on it.
Remix
Shopify is one of the biggest Ruby on Rails applications in the world and many of the best Rails and Ruby core contributors work there. I learned a ton about the Rails stack while at Shopify and grew to enjoy coding in Ruby. But Python was always my favorite programming language. There is something about the Zen of Python that really resonates with me.
When I started, I was planning to build FATA.school in Python but as I was doing my research about technologies to teach I came across Remix. This video in particular convinced me that I should use Remix (and TypeScript) instead of Python.
In my 30+ years of experience programming there have been a handful of times when learning a new tool suddenly made it possible for me to build a whole new class of applications. Here is roughly what my timeline looks like:
- 1995 - I learn imperative programming by trial and error playing with the Quick Basic that shipped with MS-DOS
- 1996 - I learn how to create reusable procedures (functions). I can now create much more complex text-based video games!
- 1997 - I learn Object Oriented Programming, I can now create physics engines and business applications!
- 2001 - I learn Python and Django, I can now create dynamic web applications!
- 2008 - I learn Test Driven Development, I can now build apps whose complexity is bigger than my brain
- 2015 - I learn React, I can now build interactive user interfaces!
- 2023 - I’m learning Remix, I can now build Optimistic UIs.
I reckon that it is totally possible to build Optimistic UIs without Remix, or interactive UI without React. But React and Remix made it so much simpler and easier that it suddenly became accessible for me to do it routinely.
TailwindCSS
Even though I have been coding web apps for 20+ years, I have never managed to be comfortable writing CSS. I think part of it was that I had a hard time working with 3 different languages at the same time (HTML, JavaScript and CSS) and part of it was that CSS forced me to constantly switch back and forth between thinking visually about the UI and thinking abstractly about how to organize the CSS code. The process was too slow and painful for me so I relied on frameworks like Bootstrap. I would give up some control on the look and feel of my application in exchange for not having to deal with CSS.
TailwindCSS changed this for me. Their utility class approach combined with JSX means all of my code for a given UI is in a single file and I can work on UI without having to switch context between adjusting the pixels and coming up with a reasonable CSS class hierarchy.
It’s also much faster to type out the required code when using TailwindCSS compared to vanilla CSS, but this ended up not mattering much.
Github Copilot
I’ve been blown away by how effective Github Copilot has been at predicting the code I need to write. Generally, when I write the method name, Copilot is able to generate the code I need. Sometimes I don ’t even have to write anything, and just based on the surrounding code, Copilot is able to predict what I want to do next. This works for any programming language I have used and it even worked very well when writing translation files in English and French. It is much faster for me to let Copilot generate the text, if needed, adjust the prompt and retry than typing it out all by myself even when I know exactly what should be written.
Most importantly, when I can let Copilot deal with the details of the syntax I can keep my mind focused on the higher level design which enables me to produce cleaner code.
Conclusion
I estimate that the combination of Remix, Typescript, TailwindCSS and Copilot have made me about twice as productive for writing code. And with Fly.io I have spent zero time dealing with DevOps. It took me 4 weeks to build FATA.school (including the contest). It would have taken me at least 6 weeks and I would have had to compromise on the UX if those tools had not been available.
What an exciting time to be a developer! Between the commoditization of fully automated continous deployment pipeline and the emergence of new technologies like Remix and AI tools like Copilot, I feel like we are entering a new era of productivity for programmers. I can't wait to help FATA.school students take advantage of these tools to build the next generation of software products.
We regularly publish articles to inform our members and partners of the progress and impact of the FATA project. See all articles