Time's up! October will end soon and it's time for me to write down how this month has been like as a first-time maintainer!
As I am writing those lines, I've just pushed my last commits to the project working with my girlfriend keyboard after my dog spilled my afternoon coffee on my usual keyboard (🧘🏻♂️).
I think I have started programming when I was around 10 with Java because of Minecraft. I had absolutely no education and my family couldn't really help: my grandpa' was an Italian immigrant (hence my name) that left Southern Italy's vineyards for French's North Coal Mines. After him, my dad worked in factories and had no knowledge of software what so ever.
You see where I am going, right? Open-source communities were the enablers that made me able to join this industry. Namely, the CraftBukkit project and latter SpigotMC.
I stopped any open-source activity when I joined university, and I've always been struggling to get back to it ever since.
I took this year Hacktoberfest as an opportunity to get back on the rails!
Tekton is a Cloud Native framework to create CI/CD systems on Kubernetes. Tekton's Pipelines are made of Tasks that take the form of pods capable of reading inputs (called parameters) and returning values (called results).
The fact the tasks of your pipeline are containers allows you to do almost anything. I made an internal demo at my company on how I used Tekton to create a mock "Prometheus-as-a-Service" solution.
Because they are containers, you can use any language you want to
build your tasks. What came to my mind is "I will look for an SDK to write Tekton tasks".
The thing is I haven't been able to find any SDK for Tekton except an experimental Python SDK.
I thought it would be a fun experience to develop an SDK in Golang for Tekton, my gut feeling was: because creating container of go apps is made so easy by the awesome ko builder, I can definitely design a tool that developers would love to use and that makes writing Tekton tasks accessible and enjoyable. (Disclaimer: I am a Platform Engineer, it's my job to make developers happy.. So that would be a good exercise!)
Hum.. I mean go-tektasker! Tektasker was just a placeholder name made of "Tekton + Task" but I stuck with it in the end. I prefixed it with go because there could be a tektasker for any language in the future.
Instead of explaining everything by writing down a wall-text, I made a short demo video edit, it may be hard to understand it though because this project and its workflow are really specific to Tekton.
Please, check the video on the repository home page, I cannot embed it there :(
Growth
I haven't been fully honest with you...
There is another reason why I started this project but it's a bit embarasing.. But well, since you read up that far, I feel more confident telling you!
Facing Failure
I've recently failed a so-called FAANG coding interview. It was my first experience of the exercise and I went for it fully confident just to fail miserably.
I spent the next week-end feeling depressed and wondering if I was a fraud.
I don't remember exactly how it got into my head, but I remembered a sentence from my favorite book:
The power of words can be surprising sometimes. This short sentence was enough to make me move on. I introspected myself and figured out the causes of my failure:
I was no longer an effective software engineer. Why?
Because I was no longer focusing on solving problems. Instead I was trying to figure out ways to write code that would seem elegant to others so they would be "impressed".
If you recognize yourself in the previous paragraph, take a piece of paper, write "Get shit done." on it, and keep it in sight.
Getting shit done
As engineers, we are hired to solve problems first and optimize second.
That's why, for Tektasker, I focused on producing a dead simple MVP first. I kept repeating me KISS especially when I started to imagine a super complex architecture.
I remember I started to feel obsessed by the fact my code was writing ad-hoc YAML manifest for a specific version of Tekton's API resulting in an hard coupling between the Tekton version and my code. I started to imagine an Internal Representation of Tekton Tasks that could be used as the source of truth and passed to different generator depending on the targeted version... and then, I realized I have more important thing to do.. like making it works first.
// NB(raskyld): this code is dirty asf, we should be able to clean it when// migrating from ad-hoc generation to intermediate representation (IR)
Conclusion
This post is getting long already but I am really happy that I managed to contain myself to release a working MVP. The code is not fancy, there is a lot that needs to be clean or that can be improved but it's not too bad for something I made in one month working only during my off-days or out of business hours.
When I look back at it I actually achieved a LOT more than I would have if I went for premature optimization:
I wrote documentation (yes, yes, it's an important skill to practice!).
I had to edit SVG for the logo.
I finished something in time.
I made more than 4 PR for the Hacktoberfest.
I got a tree planted in my name.
I wrote a blog post about my experience (you're here).
I am not sure what the future will be like.
If the Tekton community shows interest for the project, I would like to donate the project to the Tekton Authors and start contributing actively to Tekton more broadly.
In any case, I think I will stay active in open-source. It felt good to give back to the community after all of this time and made me grow so much.