5 Painful Lessons After a Year of Maintaining an Open Source Project

5 Painful Lessons After a Year of Maintaining an Open Source Project

Daily short news for you
  • There’s another tool to help quickly search command history: atuinsh/atuin.

    What’s interesting is that it uses SQLite for storage. It also provides the feature of completely synchronizing (encrypting) history between machines. How cool is that 🤓

    » Read more
  • I am really impressed with the gemma-3n-E4B model from Google. This is one of the promising models that aims to bring large language models to run on mobile devices or the web or embedded...

    It feels like it understands the prompts better, because I’ve tried many low-parameter models that often overlook my prompts. For example, when I say, "Just return the answer, no need for further explanation," many still tend to add introductory phrases or explanations... but with gemma-3n, the responses are very much to the point.

    » Read more
  • Before, we used CSS to create a "loading" effect, but now we can achieve "loading" with just a single SVG file: svg-loaders

    » Read more

The Issue

June is a special month, even more meaningful as it marks one year since I released the OpenNotas note-taking application. At that time, it garnered significant attention by ranking in the top 2 products with the most votes of the day on ProductHunt - a playground for product enthusiasts. The feeling was indescribable as it was the first time a Vietnamese product was well received on an international stage. I owe a lot of thanks to those who followed and responded to my call on social media where I posted the article.

Currently, OpenNotas has attracted over 3.5 thousand users, with approximately 300 monthly active users. A modest number, but it holds significant meaning for a nascent note-taking application amidst dozens, even hundreds of established names. OpenNotas focuses on simplicity, cross-platform functionality, lightness, and security. Perhaps that’s why it resonates with many like-minded individuals.

Although it is called a year of maintenance, in fact, during the early stages post-release, I didn't have much time to continue its development. Partly because it met my needs. For those who don't know, OpenNotas was born out of a personal need: a quick, lightweight, and multi-platform solution that also had high security. Only recently has the frequency of updates increased, and I’ve realized that I have many lessons learned throughout this process.

Therefore, this article recounts the 5 biggest lessons learned since developing the application for the general public. This is not the first product, as this blog existed beforehand. However, OpenNotas took a different path as it resembles a daily application installed on devices. I hope this will bring fresh perspectives to readers.

Let’s move on to the first lesson!

Everything Seems Simple Until You Get Started

A note-taking application? Well, isn’t there already too many? And who would use it anyway? Sounds easy, right? - These were my thoughts before I started working on it. I can’t blame myself when there are so many existing names out there; just a little search and you can find them. But at that time, none of the applications I found suited my needs, which is why I thought of such a bold idea. Doubting my idea, I posted an article in a large community on Facebook and received a lot of supportive comments. Fortunately, most supported this decision. Looking back, it really seems like nothing is difficult; I know how to code, I have the knowledge, I just need time to make it all happen.

However, it took nearly 3 months to create a page that seemed simple. There were so many tasks to complete, from design to coding and testing features to see if they worked as expected. Not to mention that since it’s open source, I had to think about how to structure the project to make it readable and maintainable. I also had to write documentation, describe features, and the system architecture for both end-users and developers who might want to join this project.

Two things that seemed simple ended up being the most time-consuming: adjusting the display size and synchronizing notes. Indeed, I spent many sleepless nights just because I couldn’t get the display size of the views adjusted to my liking. Just one small factor could cause everything to spiral out of control, making components display confusingly across different screen sizes and browsers. It was even more unique when running on the Safari browser, where the application almost "froze" at certain positions, meaning those areas were unresponsive. During such times, I just wanted to delete the code I had spent hours writing and give up to clear my head. Those negative feelings occurred not just once but became a daily affair. Now everything seems fine, and if I find the time, I hope to document these technical debts.

Synchronization was also quite "tricky" during this phase because I had to ensure data was stored on the user's machine while also syncing it to the server. There were many scenarios to consider. For instance, what if they used the application without a network connection, and then connected later? Not to mention if they were editing some notes on multiple devices at the same time. Quite a headache, right? Honestly, there were times I even dreamt about it.

In conclusion, all problems only arise once you get started. Anyone can see what needs to be done, but not everyone can fully estimate the risks involved. If you don’t believe it, just try starting a note-taking application like I did.

Time Management, Project Management, Community Management... Managing Everything

Starting a project means you need to allocate time for development. For an office worker with an 8-hour job and an additional 2 hours of commuting, balancing sleep, meals, and personal activities, one can spare a maximum of 3-4 hours each evening. Do you think I dedicate those 4 hours entirely to staring at the computer screen?

The job of a product developer goes beyond coding; there are many other equally important tasks. You need to create a feature list, find a reasonable layout, prioritize tasks, gather data, research user behavior, and consider how to get more people to know about your application... That’s when you need to step into the role of a true manager. Managing others is hard enough; managing yourself seems easy but is not that simple.

I set up a small community on Telegram hoping to attract users to join. Just like the project, adding something new means time must be allocated. Often, I want to do things perfectly, but my capabilities don’t allow it. That’s when I realized if you want to go fast, go alone; if you want to go far, you need help. One person cannot handle all tasks.

In summary, you must learn to manage your limited time effectively, prioritizing more important tasks. Another crucial point is finding a way to balance work and health - a concept that may seem theoretical.

Applications Are Not Like Websites

The web can be considered a great invention of the tech world. Not only does it transmit information, but it also provides the ability for direct interaction with users. As long as you have a device that supports web browsing, you can access all the features of the world. Anything can be found on the Internet. However, to be honest, creating a web application is not simple.

Android, iOS... create a system of interactive components like UITextField, UITextView, UIButton... to arrange them together to form the user interface. On a modest display size, these components offer limited layout options. Nowadays, applications have become so similar that it’s surprising. The web also has those components, if not more diverse. The advantage of the web is that there is more space for display, but if you don’t know how to utilize it and clutter it with too much, it can become visually overwhelming.

When I began working on the note-taking application, I approached it with a web design mindset. In terms of layout, components, and interaction methods, it looked like a user was browsing the web. The freedom was apparent but inadvertently caused confusion for users. Recently, I have been actively improving the display to align more closely with a native application experience, making it as user-friendly as possible.

Below are the current and developing images of the application.

Current

Under Development

In summary, the freedom of the web can sometimes push human creativity beyond expectations, leading to confusion in how to deliver a familiar experience to users.

Experience More

Previously, when discussing a feature, what I cared about was the logic behind it, the components, and how they interacted with each other, organized in what architecture and how to improve performance. Now, my thinking about features has changed; the most important thing is how it benefits the user and whether they know how to use it. Always remember that adding a new feature corresponds to an increase in usage complexity.

Creating the note-taking application acts as a test for all the things I have learned during product development. Putting myself in the user's position to explore what they want and whether the application meets that well. However, this doesn’t always guarantee that what meets your criteria will be good for others.

Therefore, achieving balance can only be accomplished by experiencing similar products or even products from different categories. Understanding the reasons behind feature design helps draw lessons that can be applied in your product development process.

In summary, to develop a good product that aligns with user preferences, one must experience existing products on the market.

Perseverance

I have felt frustrated and reluctant to continue developing this note-taking application more than a dozen times. There are so many things to learn, tasks to complete, and management responsibilities, while time does not permit. Many issues haunted me to the point that they lingered in my dreams. Then I asked myself, what do I gain by continuing to develop it?

That is experience. Fundamentally, people are not that different; we are all born, grow up, start families, and eventually return to the earth. The most noticeable difference lies in their living environment. Environment shapes habits. Habits create actions. Actions lead to experiences. This makes each person unique. My choice today is to cultivate perseverance. Who knows what new experiences it will bring in the future?

Frustration is a negative emotion that arises when people feel they cannot control something. However, this emotion can be resolved by relaxing. Whenever I feel overwhelmed, I stop, take a break somewhere for a while, and then return; you will feel your energy come back to its original state.

In summary, when facing difficulties, do not lose heart; take a break and then return. It helps cultivate perseverance in everyone to... embrace new experiences.

Conclusion

After a year of maintaining and developing OpenNotas, I have learned many valuable lessons not only in technology but also in project management and personal management. From realizing that everything seems simple yet is full of challenges once you get started, to learning how to manage time, projects, and communities effectively despite limited time. I also gained a clearer understanding of the differences between application and website development, where small details in the interface and user experience can make a big difference. At the same time, I recognized the importance of always keeping the user at the center and learning from other products to enhance the quality of the application.

Most importantly, perseverance has helped me overcome feelings of frustration and the significant challenges during development. My relentless efforts have not only yielded a product that meets my personal needs but also created a meaningful learning environment. Although this journey has not been easy, I believe every experience contributes significantly to shaping the path ahead. OpenNotas is not just a mere application but a testament to my growth and determination in pursuing passion and sharing value with the community.

Premium
Hello

Me & the desire to "play with words"

Have you tried writing? And then failed or not satisfied? At 2coffee.dev we have had a hard time with writing. Don't be discouraged, because now we have a way to help you. Click to become a member now!

Have you tried writing? And then failed or not satisfied? At 2coffee.dev we have had a hard time with writing. Don't be discouraged, because now we have a way to help you. Click to become a member now!

View all

Subscribe to receive new article notifications

or
* The summary newsletter is sent every 1-2 weeks, cancel anytime.

Comments (0)

Leave a comment...