Software is an infinite canvas for creativity. A canvas that allows its creator to communicate with and impact the world. A canvas that is shaped by the life of its creator. A canvas that inadvertently captures the essence of the artist.
In the sea of software filled with tracking, exploitative patterns, bloated downloads, and other lovely practices, it’s easy to think of all software as a lifeless, evil, factory-made money-extracting machine.
Indeed, I do have those days when I see a disgusting ad for an even more disgusting game exploiting children, so some greedy, questionably conscious people can buy yet another shiny thing for their empty lives. However, there are also magical days when I discover something that is handcrafted, intentional, polished, and so beautiful that it reminds me not all software is a lifeless piece of junk.
I really liked this writeup by Steph Ango. The idea of seeing software as food is very intriguing and hits some excellent points. Like food, software varies in quality: some types can trigger a dopamine rush followed by a devastating crash, some are designed to exploit our multi-million-year circuits, and others might not be as tasty but are extremely beneficial. As a result, just like high-quality food deserves our time and money, so does high-quality software.
While I love the food analogy, to me, software is deeper than that. To me, software is a piece of art. It’s a creative, handcrafted expression that allows its author to communicate with and impact the world. Like any piece of art, on the surface, it requires technical skill but goes much deeper, capturing complex emotions and ideas.
The majority of software (at least at the time of this writing) is made by people, so whether intentional or not, software will capture the human element. In very large companies, that human part can get lost, but it’s still there. Even in the largest companies, I’m certain there was at least one person who spent hours ensuring that the text aligns perfectly or that the button animation looks whimsical. Or maybe even better, there was an engineer who fought for the adoption of accessibility APIs or the removal of certain trackers or questionable SDKs because, for them, it’s more than just a piece of software - it’s a statement of values representing that person.
I vividly remember people asking me about my work and at some point slipping out:
“But isn’t it a bit boring and repetitive?”
The first few times this question caught me off guard. Initially, I was confused as to why my work would be considered boring. As time passed, I began to understand how someone far removed from my craft could view it as a boring, lifeless task performed solely for a good paycheck. However, I never saw my work like that. From the first day I created something meaningful, it allowed me to express myself as an individual.
I want to briefly pause here because I think that it’s profound. The ability to express yourself is something that I would wish for every single individual. I believe that all of us have vast reservoirs of creativity hidden inside us, and the quest is to find a medium that can unlock that creativity. For me, that medium was software, and I was lucky to discover it early in my life.
Of course, some aspects of software development can (and will) become repetitive, and not every task is thrilling. Nonetheless, creating software is so much more than just writing code (although to me, code itself is beautiful and when written intentionally sometimes resembles poetry). Good software requires empathy, vision, and strong principles that guide the creation process.
One of the first things I do when I find an interesting piece of software is look at its "About", "History", or similar page that would allow me to better understand the story and life behind the particular software. To me, it’s both inspiring and comforting, and even more importantly, it allows me to view that software not just as a piece of software but rather as a piece of art crafted by an artist, capturing part of their life.
In addition, just as reading a food nutrition label allows me to make better and more informed decisions regarding what I eat, understanding the story behind software allows me to make better and more informed decisions about the software I use.
Invoicy
I started working on Invoicy around two years ago when the need to write invoices arose in my life. During those two development years, my life changed drastically, and I believe that Invoicy, in one way or another, captured those changes by reflecting them in its design and functionality. I can look at certain parts of the app, and it suddenly brings back memories and feelings from those times.
In the following part, I want to share some of those captured moments in hopes that it can spark something inside you. The next time you download a piece of software, I hope you think intentionally about what you are choosing and, most importantly, remember that there is a life behind your choise.
I didn’t decide to build software for creating invoices because I was excited about invoicing or accounting. It was quite the opposite. Due to the way I approached invoicing, it became an activity that I wasn’t looking forward to (apart from the money part, of course).
When I needed to write my first invoice, I spent a week looking for an invoice template that I would like. Why? Because having an invoice that looks just the way I want it to look brings me joy. After finally laying out my invoice in Sketch, I was ready to send my first masterpiece. Fast forward a few months, and I realized that handcrafting pixel-perfect, multilingual invoices became the activity that I resented doing.
On top of all that manual and not-fun work, I was at a stage in my life where I realized that due to shifting my focus, I had almost lost one of the core parts of myself that loved shipping products. It was one of the things that brought me a lot of joy and meaning. But most importantly, it allowed me to express and rediscover myself.
So, while staying in Tenerife, I hacked up my first prototype in a few days. I vividly remember running a virtual machine with the beta version macOS Ventura as it introduced one of the missing pieces that I needed for my prototype. I was so excited that instead of setting up Git or any other things, I just dragged my prototype into Dropbox. After bypassing a few security alerts on my virtual machine, I was finally able to run it. It was a truly magical feeling. It reminded me of the summer when I was sitting outside in the sun, learning about networking and performing my first network request with some JSON decoding. It might sound simple to the outside world, but for me, it’s a precious and multi-dimensional feeling filled with joy and excitement.
After that initial MVP, due to relationship problems, I didn’t touch the project for the next two months. Then, my girlfriend at the time and I started the process of splitting up, and I decided to stop working on the project so it didn’t become some secret drug that I go to in order to escape from real life.
After things settled, I really got back into the development. For the next half a year, I spent weekends and some odd nights working on Invoicy. I finally felt that I was nurturing that forgotten part of myself that was previously such a strong pillar of my life. I felt full of life. I got flashbacks from my past projects where I was losing sense of time because I loved working on it so much. Okay, maybe it didn’t feel as great as my early projects due to me becoming a more serious developer who tries to do things in a more professional manner, but that’s a blog post for the future.
Then came the summer, and I decided to finally pursue something that I truly wanted to do for some time - travel the world. Since I felt that I was healed enough to not make this an escape from recent life events, I decided to finally embark on my journey. This meant that for the rest of the summer, Invoicy development paused.
What didn’t pause, though, was the inspiration, thoughts, new connections, and my growth, which was pouring back into Invoicy. Be it a WWDC session where I saw a piece that could bring the experience to the next level or a friendly chat with people who were telling me what they like and dislike about the current Invoicy MVP.
Around September, my summer adventures settled down, and I was on my calmer nomad/backpacking adventure. This meant that from that time on, for the next three months, every free moment I found was dedicated to Invoicy.
I vividly remember working on charts and reports after a morning surf session in Costa Rica and asking myself: can it get better than that? While now I know that the answer is yes, it doesn’t matter because every time I open that Invoicy report window, I remember myself sitting on the surfboard in the calm morning water, being grateful for all the opportunities in life.
When I look at the invoice list, flashbacks of me sitting in a coffee shop and exchanging thoughts with another person about each of our projects and future ideas pour in. Small ideas spawning from those interactions a few months later became core parts of the app.
After meeting my family on the other side of the world and refreshing my inner self with warmth, Invoicy work resumed yet again around January. However, this time it didn’t roll out as before. I almost couldn’t find free time and energy, and when I did, I felt that my focus was all over the place.
However, after a week of struggle and reflection, I finally decided to change a few things in and outside of my life, and I was back in my happy stage, working on Invoicy surrounded by the curfew in Ecuador.
Then came Argentina, and work on Invoicy truly started to get intense. Honestly, it felt like a few of the most productive months of my life (~32% of commits were made in Buenos Aires). Not only the most productive but also happy and fulfilling.
While a lot of functionality was implemented in Argentina, the strongest memories that flood my mind are when I open the invoice templates. I don’t know if it was pure chance or life playing tricks on me, but working on invoice templates and using the Montserrat font, only to discover that the font was designed by an Argentine graphic designer inspired by the posters and signs in the Buenos Aires neighborhood of Montserrat that I just roamed around earlier, was a delightful coincidence.
This is also the part where I started receiving valuable feedback from my buddy Halldor. It reminded me once again how invaluable it is to look at something with fresh eyes. Those first few minutes of someone seeing things that my eyes and brain had become accustomed to ignoring are some of the best moments. It is especially helpful when the person looking at it has a good sense of empathy with the user rather than just a technical perspective. Honestly, during the next few months, I received so much valuable feedback that I wish everyone could have a Halldor in their software production lifecycle.
Then came Taganga, a place where I idyllically imagined producing the code of my life while enjoying nature and beautiful views. In reality, it was a bit different, as it seemed that every single thing was trying to stop me from working on Invoicy.
However, after a few weeks of adaptation, I began to embrace my hermit lifestyle and decided that it was the perfect opportunity to create a random challenge of not shaving my beard until Invoicy was available on the App Store. While I didn’t need extra motivation to finish up the project, I can tell you with confidence that in the last few days before the release, I was more excited about getting rid of the beard than hitting that release button.
Every time I see the Invoicy database file or someone contacts me about a weird issue of something not being stored properly, I will remember Taganga. To be more precise, I will remember writing heuristic and somewhat questionable storage optimizations in my sweaty chair with a non-working A/C, a bucket of ice cream next to me, and Raúl asking for attention.
Finally, around May, I arrived in Cartagena, knowing that this was the place where my long and very annoying beard would finally be slain. Oh, and… Invoicy would be released. Since most of the hard and sweaty work was done in Taganga, this was a place where only a few minor changes needed to be made. Oh and yeah all that fun admin work of descriptions, policies, screenshots, videos and so on that usually gets lost in beautiful tales of releasing the app.
From a financial standpoint, measuring all the metrics and time invested, Invoicy would appear as the most significant failure I’ve ever undertaken (yet). However, when viewed through the lens of personal growth and human experience, it comes up as one of the most important projects to me. It’s significant to me not only for capturing profound life changes and growth but also for breaking a vicious 2056-day streak of stepping away from my core - expressing myself through software.