← home

How I built my first blog with 11ty

Like many others, my first exposure to writing "real-world" software was building a website. While this actually happened relatively late for me (my junior year in college), I can easily see how it could be a pretty magical moment for someone just starting out. A couple HTML tags, a browser, and a good old "Hello, world!" are all you need to start your very own, very first website. And then, you're only limited by your imagination (for the most part). Suddenly being able to participate in the creation of something that is so ubiquitous yet previously opaque to you feels so cool. And honestly, it is cool. The browser is the most standardized deployment environment ever. It means you can write code that works on all devices, by default. That on its own is something to get excited about.

But that moment was short-lived for me. To be exact, it was the very first lesson in a 4-week bootcamp being run by the biggest web development club on campus, intended to quickly get newly "hired" developers like myself ready to join teams building real websites from the ground up for local non-profit organizations. In those four weeks I heard terms like "Agile", "the DOM", "the MERN stack", and many others for the very first time. And of course (from lesson two), "React". This was my magical moment. At this point it had been nearly a year since I'd switched my major from Mechanical Engineering to Computer Science and opened a Python interpreter for the first time. In that time, I'd been hard at work trying to wrap my mind around the fundamental data structures, algorithms, and programming paradigms all new CS students must master. But at the time it was hard to see how all this information would translate into skills I could use to actually build things.

The bootcamp changed everything for me. Because the development teams in the club have to actually ship working software to clients every semester, there was a huge emphasis on practical skills above all else. It was hard to not see how any given piece of information would help me work towards the very tangible, very imminent goals they set for us. React was the pinnacle of this feeling for me. A cutting-edge technology, in-demand and in-use at all the biggest companies. React was quite literally synonymous with "web" in my mind, and I loved it. Working as a developer on my first project I was immediately able to be productive and build features I wouldn't have even dreamed of attempting weeks before.[1]

Part 1: React, revisited

The next year, I was asked to return to the club as a tech lead. Although I'd exceeded my own expectations and learned a lot as a developer, I still felt very much like a beginner. The idea of directing the development of a new project from start to finish was extremely intimidating. So I set out to learn as much as I could.[2] Around the same time I was also hired to work on a newly funded project in collaboration with Cal Poly students and faculty, called "Digital Democracy". I was asked to build out the core website using Django and (you guessed it) React. I often feel that learning and personal growth are not constant. Instead, they come in different speeds and phases throughout your life. Now starting my fourth year along with these new challenges, I went through a huge and transformative phase of growth as an aspiring software engineer

It was at this time I began reading about the web and building for the web. This gave me new insights into the things I was building for the club and my new job. I realized that many of the things I had built were imperfect. In fact, some parts were rather slow and bloated, honestly. I learned that React is not the only way to write JavaScript(!), that there are reasons to not use noSQL databases, and that JavaScript backends are actually not as ubiquitous as I'd thought. This was shocking to me. So I asked: "Why are these frameworks so popular if they made such a slow, bloated mess of what should've been simple applications?" I think there are two things to consider:

  1. My lack of experience / user error
  2. Given that, it was far too easy to write things that worked well enough to consider done, but not well enough to feel great using them

For a beginner, the level of abstraction offered by a powerful tool like React is just too high. I'd compare it to flying a fighter jet before knowing what drag is.

I soon discovered Alex Russell. Reading his blog was the first time I'd heard someone talk passionately about things like accessibility and performance for the web. It was also my first exposure to any kind of meta-commentary on the state of the web. This had been completely absent from formal and informal discussion in my university classes and clubs. Alex is definitely a divisive figure. I honestly worry someone might blacklist me for talking about him in a positive light.[3] I personally found myself excited to see someone with such strong critiques about something very popular (JS frameworks) that I had been led to use and quite literally accept as synonymous with "web" (see above). I loved that he wasn't really shilling any alternative turnkey solution. Certainly not another framework. His goal is simply to make the web more friendly for people who don't have a $3k laptop, for mobile users, for people with disabilities, etc. I find that admirable.

My previous exposure to the web through classes and clubs had been very oriented towards the likes of "this is cutting-edge", "this is industry-standard", and "this is very cool and will get you a Job". I truly don't think that any of these things are false, by the way. But I realized that none of my peers were asking any of the questions I was asking. I just liked that Alex's writings essentially doubled the size of my conception of what the web is. Basically, I became very curious!

Today I am still at the very beginning of my career and my knowledge of the web. Once I became interested in building a small personal site (see previous post), I had my first opportunity to try and put into practice some of these new ideas that had been swirling around in my mind. Whereas school and work hadn't always allowed experimenting with these alternative approaches, the small, static nature of a personal website made it even more of a perfect testing ground. At first I wanted to try self-hosting and using a new language I'd been wanting to learn to challenge myself technically. But I remembered that the end product of this process will ultimately be a landing page for my online and offline, personal and professional presence. So I began looking for tools that would Just Work. Things that are proven reliable and mirror my newly-earned interest in accessibility, reliability, and performance above all -- rather than maybe looking cool or anything particularly flashy. I wanted to represent myself and the values of the kind of programmer I am and hope to become one day. I saw Eleventy being used and pushed by other people who believe in building a better web -- people with a lot of passion for what they do and the things they create.

Part 2: Building it

I was curious to see how much of my experience working in frontend and backend frameworks would translate to my new approach. I'd say that it did in some ways. Going from a JavaScript-first approach to trying to remove JavaScript wherever possible meant the "coding skills" and framework knowledge I'd built up wasn't very useful. The things I'd taught myself along the way about web fundamentals like the DOM, DNS, client/server, and HTTP as well as networking protocols from my Cal Poly electives were critical. I became very aware of just how much I didn't know about the web. Its history, past efforts to guide it one way or another, the legacies of those efforts and how they affect the way we build today. That also meant I got distracted easily reading decades-old forum posts and mdn web docs. My curiosity slowed my progress towards a finished site I could put on my resume, but it sped up my progress towards becoming a better, more knowledgeable programmer. I didn't feel a need to rush anyways. Building this site has been one of the few things I've done where there is no real time constraint. I wanted something uniquely mine, something I could feel proud of, something I could expand upon and update through the foreseeable future.

In other words, it was kinda hard in a completely different way than I was used to things being hard. I consider this much more of a web project than a programming one. On one hand, I was building a website, and a dead simple one at that. I'd built websites before that were orders of magnitude more technically complex. On the other hand, you can see that I had some pretty lofty aspirations for it from the start. I had to actively resist the urge to build a deep, intimate understanding of everything remotely related (and often unrelated) to the tools and standards I was using. When I had real deadlines it had been easier to justify minimally acceptable, if perhaps unsatisfying, understandings when necessary. I am learning to quickly and aggressively pick and choose the rabbit holes I go down, following my gut and previous experience to guide me towards tangents that would maximize tangible returns on my time investments. I do feel that this is a skill you build throughout a lifetime.

Part 3: Anyways, here it is (alt. Beautiful Dreams Of A Young, Naive Code Monkey Meet The Cold, Hard Reality That Is Writing Functional Software) (alt. alt. Just Put The Fries In The Bag Bro)

So, yeah. I don't think it would've been possible for this site to fulfill all my grandest visions for who I am and what websites can be (at least not yet!). Writing software means getting a little dirty and pragmatic sometimes. And I have much to learn... But I do like it, and it's mine and that makes me happy. Consider this a v1. It's the first time I felt I could express something about myself personally through a piece of code I wrote -- a great benefit of becoming opinionated, even if in a small way. Any shortcomings or avenues left unexplored (intentional or otherwise) are just motivation to write more and better software in the future.

Final note: I think there is a chance this could come off to someone as a hit piece against React, the MERN stack, JavaScript, CS undergrad culture, the things I've worked on, people I've worked with, etc. To be excessively cautious, I want to definitively say that no, this is not at all my intention. I'm so grateful to everyone I've worked with and everything I've worked on as these experiences have guided and shaped me on my path to becoming a better software engineer. I'm incredibly lucky to get to do work that I find so meaningful and challenging in many ways. This website and this blog post are opportunities for me to be reflective and approach things in ways that I'm not able to for work and I hope that they are interpreted as such.

This was a lot of fun to build and write about. Thank you for reading!


  1. I give a lot of credit to my friend (and tech lead, at the time) Jonathan for this and many other things. If you're reading this, thanks buddy :) ↩︎

  2. It was really this challenge that started me on the path that would eventually lead to the creation of this website (and my renewed love for programming). ↩︎

  3. Only half joking... ↩︎