Have you ever had that feeling of building something from scratch? The temptation of proving yourself that you are a software developer and that you should use your own packages instead of relying on other's works?
Well a week ago I had that feeling, CSS! How hard could it be to make a bunch of styles for common elements, right?
So I was using this awesome project called skeleton, an adaptive design system powered by tailwind, and I really liked the foundation it gave me but didn't really use most of their provided components. And for that reason as well as the urge to build my own tool, I decided to make stratum!
This is by all means not to advertise my package, I assure you after this experience I do not want to maintain it outside of my own issues and feature requests 😅.
The Fun Part
Essentially, the idea was to strip out the things I liked from skeleton
and add my own styles, maybe even make my own svelte components, I'd learn a bunch of stuff, and maybe even get a small community going.
Oh how naive I was, imagining and brainstorming ideas and actually executing said ideas are very very different things, this project made me more aware of this now.
Learn, Learn, Learn
I said that if I was gonna do this I was gonna do it right, as if the package is official and would actually be used by people. Hence the first thing I had to learn: monorepos, setting them up, looking into how projects could communicate with other projects, keeping dependency versions consistent across them.
Simultaneously I also had to make a deeper dive into tailwind, making custom utilities, diving deeper into CSS, looking into cross browser consistency especially for native elements, and at the same time exploring the internal workings of the skeleton
project so that I have a guide.
Lastly, I had to look up A11y, how to make quality svelte components, and all how in general how I can make stratum
more unique, since I wanted not to just copy-paste skeleton
.
This was still fun no doubt! The challenge of learning, the reward of demystifying advanced-looking concepts and things, it was still a positive experience, however this is where I started to feel overwhelmed.
Smaller, Smaller, Smaller
Not long after creating the first drafts of the core
package, I realized I had to be realistic. I cannot complete this in an appropriate amount of time and I only had one developer working on this (me).
During this, I had made plenty of issues to track what needed to be done and any bug I found, the more I explored/brainstormed the more issues I solved, and the more issues I created.
If I were to see this project actually making the finish line I had to strip away a lot of the features I had planned, I gave up on the idea of making my own components, I removed already created features/projects, and after all that I was left with an appropriate workload, although be it not as impressive.
The work I didn't think about
Okay after a big while, I've done the work, I'm ready to release v0.1.0 of the project, I'm ready to host the created sites alongside the release. And overall I was happy with what I made.
But it's not just the code you had to prepare: How do I automate version bumping and changelogs? If this does get an active community how would they contribute? Do I even want to take on reading PRs or solving issues? Do I even want to build a community from scratch? Discord, Youtube, advertising the project, etc., What about updates to the project? Do I really want to make migration guides and documentation?
The answer to most of the questions above is a resounding NO THANK YOU. (the first question was solved with changesets, go check it out it's awesome!)
It was clear to me I have bitten of more than i could chew, I don't even believe that stratum
would be worth investing that much time and effort. So I left it at that, this project is now just my personal CSS framework, I still am very happy with it despite not reaching the stars I fantasized it would reach 😅.
The next time
Despite not wanting to author an open source project, if I were to make an open-source project of similar size here's what I would do differently:
Get some other devs into the project: Ape together strong as they say. Even at least one more developer could make a huge difference, you get feedback on your project before even making it, and the workload is theoretically halved or significantly reduced.
Dream appropriately: My project initially had a scope that required say two or three developers working together, a few months, and also not forgetting to actually put the project out there. Before even starting, look at how much time and effort you can actually devote to this project.
I have a lot more respect now towards open source maintainers, sure you could make the argument that some are funded or that they gain reputation by doing so, but that doesn't make the work they do any more easier, work is still work, and to be honest they could arguably get a lot more from just devoting their time elsewhere. So thank you to any maintainer who is reading this, I promise to donate to projects I use from time to time (not now though I'm broke 😭).
Even with the project not going as planned, I still learned a lot from the challenge, I'm still gonna use stratum
for my personal projects and am very accomplished for completing it (barely! this thing doesn't even have proper documentation!)