‹ go back
A few months ago, I applied for an internship somewhere. It was a pretty standard application for a pretty standard development position. List your specialties, why you wish to apply, what makes you a good candidate. Have a 250 word input to cram your life’s goals and achievements. Upload your resume, mindlessly fill demographic information, do you wish to forward a copy of your responses to your email, click send. A cookie-cutter application, nothing special.
One of the main parts of the application was to upload a major project, and write a little bit about it. They’d consider the size, purpose, application, and several other characteristics of the given code sample, apparently, and this was a key point of evaluation for the position. What I submitted is irrelevant to the point, but I remember submitting the application with a worrying thought in the back of my mind.
As I was going through past participant’s blog posts and collecting any shreds of insider information, I realized that there was a clear divide between ’their projects’, and ‘my projects’. Theirs were so much more complex, integrating many technologies, and actually had an obvious industry or consumer application. My science fair project1 - certainly not ‘clean code’ by any regards - seemed very small in comparison.
Through this application, I realized that I really didn’t have any ‘big’ projects. My largest project was not my most complex, or anything that’d I’d deem representative of my skill. My more ‘complicated’ projects were more components to be mishmashed to extend or work with other software, not individual applications.
I’ve been thinking about my work recently over the New Year, and I’ve come to conclusion that I’ve preferred to write small tools for myself. No one else (well, okay, maybe very small amounts of people) will probably use them, and that’s okay for now. I’d eventually like to work on bigger projects, but I’d also like to make sure that those projects are something I’m personally invested in, and not something I’m developing for the sake of my resume or something. At the moment, I haven’t found an idea or something that I’d want to work on - plus, senior year and the associated heavy workload.
However, I still think there’s an interesting area to be explored with ‘small software’. In this post, I’d like to highlight two (and a half) toolkits I’ve used to make the aforementioned personalized software. Consider this a combination of thoughts regarding making extremely customized software for a small user base, and a year (± three years) in review.
Prelude - Roblox
Roblox has been described as both a highly addicting platform, and a highly creative engine. (If you don’t know what Roblox is, go look it up - the development and monetization side of things is especially interesting.) I don’t think I’ve seen a community that’s been more inspired to share games (barring perhaps Minecraft, which shares similar traits). Even though I was maybe ten, I still managed to wrangle a couple small obbies (essentially 3D platformers) and story adventures out. The Roblox community, as I remember it, was a hivemind of kids teaching other kids how to program. I’m sure that there were a good chunk of competent adult programmers, but as a kid (maybe it was just selection bias), I remember looking up to those channels churning out Lua tutorials each week.
Roblox was my ‘in’ to game development. It’s nowhere as complicated as Unity, and it’s a great example of something that’s literally child-proof yet has an ample system for expansion. I had no experience with proper programming or game design, yet the system of prefabricated assets and drag-and-drop configurability made it super easy to get started. Lua was too complicated for me to understand, but with assets, I managed to bodge together a CTF game for me and my classmates. It was only for us, and was, looking back at the previews I can see on the Roblox site, absolutely horrible. It was just a tiny map with several biomes and ‘hidden’ flags (the concept of randomization and terrain generation was still several years to come) - but it was something. Something that I’d made, and proudly showed off, climbing up several rungs in the 5th-grade social hierarchy as the Roblox dev.
While Roblox is a proper standalone platform, I included it here because it has a sort of whimsy that I find mirrored in the other two (eco)systems that I want to touch on today. That first spark of ownership is something that’s sort of addicting to the right people, and probably a good explanation to the infinite server forks my friends had. Roblox gave budding devs a platform, and held their hand until they stepped into the infinite world of Lua and ‘proper’ scripting. I think that’s kind of fun - not just because it’s so easy to use, but also because it actually makes game development open, and encourages little kids towards creation, and little bit away from mindless consumption2.
An interesting approach to building hyperpersonalized tools is by extending yet another tool. One of the best examples of this is browser extensions - what better to customize than the very tool you’re spending most of your online life in? I already use my browser to consume most of my content, and to keep in touch with people, so I personally think investing some time into making the browser exactly what I’d like it to be is a worthwhile investment.
If you’re a developer, or have any experience with JS, Chrome extensions are relatively easy to get started with - a manifest.json and a couple small HTML / JS files later, and you’ve got a working extension. Because they’re so easy to use, they’re what I generally turn to in order to facilitate and automate basic actions that I do often. I’ve made ones recently for Revshare for GH, and one that I’m using at the moment for tracking some interesting experimental data (blog postmortem of self-research to come in a couple weeks). Both took relatively short times to build - one was a CS50 project, which took a month-ish, and one was done in literally an hour. The difference? Whether I chose to make it a ‘proper project’ - more on this later.
There’s something very fun in playing with and manipulating what’s shown on a page, especially when it’s something just you’ll use.With the way Chrome makes it relatively easy to add and iterate on your own extensions by loading unpacked folders somewhere, I can justify taking a couple hours to slap something together to fix a ‘minor problem’. Of course, there’ll be ‘minor problems’ that a lot of people share, or that you’d like to make aware to others - this is when publishing an extension might come in handy. But for the majority of my ‘minor problems’, it seems that no one else has them, so for now, I’m content to continue hacking away with ‘hyperpersonalized’ things.
Shortcuts (on iOS, though I’m sure there’ll be an Android equivalent somewhere) is another example of extending an ecosystem to personalize it. As with Chrome extensions, people have made amazing things - I’ve seen entire life management and tracker apps made in it, as well as very slick widget apps and integrations3. It’s sort of like a hybrid automation and Siri extension system, but I use it mainly for its automation capabilities and integrations. I don’t think I’ll ever get into iOS development, but Shortcuts lets me make what is essentially a proper app - I can enable it in the Share Sheet (the little popup when you’d like to share something) and I can make it do rather complicated things with APIs and files. It’s an interesting attempt by Apple to finally give people some much-appreciated customization and a way to make apps without shelling out for a license and diving into learning Swift.
Using the right tool for the right job is something that I often ignore, but I’ve recently been trying to decomplicate most of the things I make (which, historically, have been very overcomplicated). A couple weeks ago, I was trying to make a little form for a tracker, and was toying with the idea of making a PWA of some sort, connecting it to some GitHub repository issue4. In short, it would be very complicated, but good fun to code. However, I resisted the urge to immediately go create a new repo - I’d rediscovered Shortcuts earlier that week. It was surprisingly pain-free to drag and drop a bunch of blocks together to POST data to a Google Sheet (probably a better way of storing information as opposed to an issue thread), as well as make it available to interact with from the browser bar.
Another interesting thing with Shortcuts is that it’s the very embodiment of the entire ’no-code’ thing that’s supposed to become popular enough to take over my job right about when I graduate university (/s. Maybe.). I don’t have a lot of Shortcuts rigged up at the moment, but I’d agree with r/Shortcuts that the entire process of making one is very satisfying. Sometimes the smaller screen size of my phone makes it a bit difficult to drag things to the right places, and sometimes copy-pasting things around can be a hassle. Still, I think there’s a sort of whimsy in building your own ‘app’ that even non-technical people can take advantage of. Again, there’s that hyperpersonalization people can get. Instead of waiting for someone to solve your problems for you with a proper app, you can slap something else together in Shortcuts.
Honourable Mention: Repl.it
Repl.it also ties in quite nicely to my points about Shortcuts: what these two tools have in common is their excellent method of reducing the boilerplate and meta-work involved in creating something. I remember when I first started getting into Python, I was still on Windows (with its very scuffed language download methods and its automatic symlink to the Windows Store), and I’d only been introduced back then to either VSCode or proprietary web IDEs. In short, I had no idea how to install Python. But Repl.it let me set up my little scripts and later, even full-on shared Discord bots, without having to mess with the tooling. There’s a very magical sort of excitement that comes from being able to spin up my own machine and focus on the development - sure, it feels less official than doing the Heroku or Docker deployment yourself, but, as with Shortcuts, it’s abstracting away the pain points, and letting users focus on the process of creation instead. (And unlike other IDE solutions, it’s powerful too - not just a sanitized input system that strips out XSS or whatever.) When trying to work with hyperpersonalized software, I don’t want to have to deal with devops tooling - I can let things be slightly messy and unconventional, as long as they’re taking away the pain of setting up deployment.
Returning to the internship application: my GitHub has a significant population of these tiny creations - be it extensions, small scripts, and personal utilities. Microapps, as I’ve decided to call these small little one-user extensions and automations, are something that I’d like to continue to explore. I keep returning to the word whimsy to describe these microapps, and that’s because whimsicalness is exactly what I see in making these. The ease of iteration and production is sort of a fascinating idea, and one that I’ll always keep an eye out for. I realize there’s something sort of ironic in actively sharing microapps, but hey - maybe I’ll help one person who has the very specific problem that I do, and that’s more than enough.
By taking the pressure off to make something that’s useful for other people, or that’s polished enough that you’d be willing to shamelessly promote it everywhere, I feel like I have the freedom to focus on having ideas that’d benefit me first. I’d have that freedom anyway, but by plastering ’this is hyperpersonalized, don’t attack me if it’s broken in one of these edge cases’ over the project mentally, it feels like I have more room to figure things out. While I’m happy to, and do, share most of my work, I’d rather not add more stress to maintain something I don’t believe in anymore, or that I’m forcing myself to do for no good reason.
I think this can serve as an effective sieve of ideas - a bunch of ideas flow in, and you filter them in or out depending on whether you yourself are emotionally drawn to the idea. Ideally, you’d find a happy medium of ‘helps people’ and ‘helps me’, but that might not be the case all the time. I’m still very young - I have a vague idea of what I’d like to do, and what I’d like to work on in the meantime to get myself to that end direction. For now, I’m leaning on the side of ‘helps me’ - there’s something very satisfactory in building smaller tools that benefit my own workflow.
I don’t know why I need to preface this, but no, I did not
import random. ↩︎
I also find it really amazing that Roblox actually has a system to properly pay their developers. I’m pretty sure if I’d known as a kid that I could have saved up a couple Robux, I’d have put much more time and effort into trying to monetize my hobby - I was a very entrepreneurial type of kid. I remember seeing an article (might have been this one) about the creators of Jailbreak, a game I’m pretty sure all my classmates were fairly addicted to. (I wasn’t good enough at the game, and stuck to obbies, but those are in themselves extremely lucrative.) You’d expect most people would’t pay for cosmetics, but I suppose the in-game (and in-class) clout people who had Roblox Premium or whatever was enough of an incentive. ↩︎
Somewhat ironically, I still haven’t bothered to customize my home screen. I’d like to get larger widget grid icons for some of my Shortcuts and apps that I’d like to encourage myself to use more, but I’ve not found the time to do that yet. Someday. ↩︎
GitHubDB, as they say. I don’t want to talk about how called out I feel by this. ↩︎
‹ go back