Feb 16, 2025
Retrospectives on Treehacks, and a little bit of Clownishness
Assorted, loosely-organized thoughts from my first hackathon
1641 words
I've always been hacker-culture-adjacent — but only really adjacent. I definitely liked building software just enough to give this site a frontend and backend, but I thought I didn't like it enough to do much more than that. As a part of me turning towards technical work, though, I thought it would be fun to try a hackathon.
My goals for Treehacks were
- Learn a bunch of new technical skills
- See if I like coding for long periods
- Finish a whole project over the weekend
so I planned accordingly. (As a spoiler, I went ~2 for 3, I'd say.) I didn't really think about the prizes or trying to win; I made a relaxed duo partnership with a friend who was going, and we picked what we thought would be a small, cute, and opinionated app we could use with our friends.
We called it CoVo according to Stanford's two-syllable naming conventions (playing especially off CoHo, short for Coffee House, which is one of the cafes on campus) — short for something like "collaborative volunteering" or "community volunteering." CoVo was supposed to scrape a bunch of different volunteering events at Stanford and display them on one platform; then you and your friends all could create accounts, and you could see which events your friends were signed up for so you could sign up with them.
We picked this project because it felt fun, well-specified, and technically within reach; we both had built things that were vaguely similar but never used this stack before. It was full-stack JavaScript, with a bunch of components: the backend ran Node.JS with Express, a web framework, and a database running MySQL, as well as two shell scripts I wrote for setting it all up; the frontend ran React Native with Expo, and sent requests to the backend API endpoints to get all the data to display upcoming events and such. The backend was supposed to run a web scraper as well, though we didn't end up getting to that, nor any of the other extended functionality.
It was… much more annoying than I think we expected. We did most of our coding during the day on Saturday, since we got proper-ish nights of sleep on either end; we thought we could get more done, but instead we both lost many, many hours to stupid software setup stuff, squashing tiny irritating bugs that turned out to be resulting from, as a sample of some of the things we touched on, some bizarre property of async
functions, the eventbrite api (don't bother asking), or a still-unexplained technicality around the ;
operator in bash. In the end we ran out of time to build some of the stuff we really wanted to build; we abandoned our project early, around 1am on Sunday morning.
But I think on the other end of it, I'm not terribly distressed about how things went. I'm taking a lot of useful things away from it. To begin with, I can write backend + frontend JavaScript now; I can write my own shell scripts, and I can build and test React apps. I learned some interesting (albeit shallow) stuff about HTTP requests and for the first time built a full-stack app that deployed across two different platforms — this site was the first full-stack dev project I'd ever done, and it all happens on one server, whereas CoVo had separate server API endpoints and a frontend that queried them from the user's device.
These are all extremely useful skills. Though CoVo didn't get finished, we got to a point where what we built can be easily repurposed for future projects; I also decided that I really love React, and will be able to use it for cross-platform software development in the future when I have goofy little apps I want to publish. I think the time I spent debugging all of the stupid little thing was time spent learning, and was worthwhile.
I think I learned a couple other life lessons in the process. Whenever people asked us about our project, I realized I felt embarrassed to tell them about it. I don't write much code! Compared to the complexity of many of the things that were going on around me at the hackathon, the project I was working on felt like child's play. To be dramatic, it felt vaguely.like the drunken dream of an aspiring ~social networking entrepreneur~ of ye olden days, or the kind of startup idea your parents come up with and propose to you over Thanksgiving — "let's make Strava, but for volunteering! Let's make social networking for good!"
It wasn't really that way, but at times I felt self-conscious that it was; definitely I felt like I should have spent more time thinking about the pitch. In fact, that's I think one of the big takeaways: how you represent the thing to yourself matters a lot — don't demean your own projects. One of the big life-strategy updates I've had in the past couple months — in addition to deciding to seriously pursue technical work, and to try and be more insane — has been getting more comfortable feeling clownish, in part or in whole. I'm doing things where I'm out of my depth, and trying to get comfortable with that. When doing that, though, insecurity will doom you! You need to be clownish and embrace it; you need to be inexperienced and charismatic, unshakeable and joyful. If you demean yourself, your results, your efforts, you break down the momentum you've built.
I learned a couple lessons about software development: I became more confident on my previous assessment that learning new tools is high-overhead on short-timeline projects, but in the grand scheme of things quite easy. I only scratched the surface as far as features of the frameworks I used for this project, but already feel like the scope of things I can build has expanded massively. I also understand now why most teams are made of 4 people; there were often times when I wished I could work together with someone on a feature. More importantly, there were lots of things that would have been fun and funny to implement but we didn't have time; a 4-person team has dramatically larger capabilities than a 2-person team to an extent that really matters in the context of a hackathon. Saying that aloud it sounds obvious, but really understanding why that is the case intuitively will be helpful for estimating and fleshing out project plans in the future.
And one final big update is that I think I do really have the capacity to deeply enjoy software development. It is genuinely a matter of fluency, as I had thought: in the moments when I really felt like I understood the tools I was working with, writing code was really fun! In the past I've spent hours upon hours working on my website, and this project too felt just the same. I really enjoy the experience of long blocks of focus, with tangible progress and clear things to take pride in at the end.
I think I want to more strongly emphasize deeply learning the tools that I work with. I would never consider working on a math problem the way that I work on writing software. To a large extent that is a different medium, but I think that there's something to be learned from the comparison: the default way I write software (reading the docs quickly, getting down to writing as soon as I can, jumping back and forth between online resources, etc.) leans a bit in the 'sporadic and shallow' direction, in a way that I think is totally find when you're learning new tools, but not sustainable in the long term. With long horizons, I want to spend more time deeply understanding the code I write — effortful practice, reducing the number of errors I make, bugs I produce, and really thinking deeply about the code I build. The better I get with writing code, the harder the projects I can do — likewise with how mathematical maturity allows you to pursue more complex and theoretically interesting explorations, programming fluency allows you to pursue more complex and technical endeavors.
I feel, to a nice extent, like I put a stake in the ground today — I did something I didn't expect to find myself doing, built something real, worked on something technical, even if it was small. It used to be that I would think, "I bet I could do that if I tried" — I'd see someone whose work I couldn't help but respect and think, "wow, imagine if I was that dedicated to something." But before the decision these past months, I never tried, or at least didn't try hard enough; I never put myself fully into anything, gave myself up to the deep end, because I was afraid of something — possibly failure, possibly something else. I have yet to learn how to push my full self into something. But I'm working on it; now I am trying, both this weekend at TreeHacks and more generally in my life, and there's glory in my clownishness. There's joy in my immaturity. Even when I suffer, I win — even when I fail, I become more powerful.
In the end, I think CoVo was a cute project, and it was meaningfully successful. It will win me no prizes and no job offers — but I'm proud of the work I did, I learned a lot, I got to spend a bunch of time with my teammate and got closer with her, I saw a bunch of friends that I missed, and — above all — I tried. CoVo has been my roadmap along one of the first little hills — the first of many, I dare say, as I begin the ascent.