Hacktoberfest 2023: My comeback to Open Source!
Tags: hack23maintainer, opensource, hacktoberfest23, go
Published: 2023-10-31 19:59:45

### Intro

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 (🧘🏻‍♂️).

#### Who am I?

I am @raskyld (duh), 24 yo.

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](https://www.spigotmc.org).

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!

### Project

#### Problem Statement

I recently discovered [Tekton](tekton.dev) while trying to find different ways a company could implement its [internal developer platform (IDP)](https://internaldeveloperplatform.org/what-is-an-internal-developer-platform/).

![TektonCD](https://tekton.dev/images/tekton-horizontal-color.png)

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](https://github.com/tektoncd/experimental/tree/main/sdk/python).

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](https://ko.build), 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!)

#### My project

Introducing... Tektasker!

{% embed https://github.com/raskyld/go-tektasker?tab=readme-ov-file#demo %}

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...

![oh no..](https://media3.giphy.com/media/GwJySDxO1vWXRV76lB/giphy.gif?cid=ecf05e477x1j0jwft6ucfgyv7jsq53u5ss637sgvjb1nzfuq&ep=v1_gifs_search&rid=giphy.gif)

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 cost of failure is education.

Devin Carraway, [Google SRE Book - Chapter 15: Postmortem Culture](https://sre.google/sre-book/postmortem-culture/).

Blessed may he be!

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**.

I satisfied my OCD by writing [this simple comment](https://github.com/raskyld/go-tektasker/blob/19cc6091ac88069f86e9bd1bf896407248156101/internal/genyaml/gen.go#L200-L201), and moved on.

```go
// 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 learned more about GitHub Actions.
- I learned about [SLSA](https://slsa.dev).
- I learned how to bake a version during the build process of a go app thanks to `ldflags`.
- I learned **A LOT** about Kubernetes SIG `api-machinery` libraries.
- I learned about some of Tekton's internals.
- I finally got back to open-source.
- I learned to use DaVinci Resolve to do a simple video edit for the demo.
- I learned about the [Astro](https://astro.build) framework.
- 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.

Thanks for reading!

*If you're interested by Tektasker, head to [go-tektasker.nocera.eu](https://go-tektasker.nocera.eu/)*