DEV Community

Daniel Rendox
Daniel Rendox

Posted on • Edited on

Starting from the blank canvas, trying to be lazy, and other insights from the 1st week

1 week ago I decided to take a challenge for myself that focuses on learning and building in public. Itā€™s time to reflect on what Iā€™ve achieved.

Starting from the blank canvas

This week Iā€™ve been mostly working on the business logic of my app. Fortunately, since the day when I got the idea of it, Iā€™ve collected enough information to know what I want to build now. I analyzed similar apps, wrote down emerging ideas, and even thought about the design.

But even so, I feel like Iā€™m starting from a blank canvas. šŸ˜… Thatā€™s because, when I think about how to actually implement those features, I realize that there are still lots of things to consider.

However, I really enjoy designing and building something that will certainly help me and is likely to help many people in the future. Here is the Github repo, BTW.

Speaking about design, I donā€™t use any design tool like Figma. All the UI is currently in my head and other apps I use for references šŸ˜† Thatā€™s because I tried using design tools and discovered that it really takes time. I think, Iā€™m a lot better off just drawing sketches on paper and writing the UI programmatically at once (but weā€™ll see).

Trying to be a lazy developer

My app development started with a challenge. I started with writing UI cause Iā€™d passed a codelab about the framework and wanted to practice a bit. In my appā€™s design, I imagined a collapsing toolbar with an image. But the matter is that the framework does contain built-in functionality for collapsing toolbar, but doesnā€™t allow putting custom content such as an image into it.

I spent a lot of time figuring out a way how to do that and eventually found one. Here is an example layout for you to understand ā¬‡ļø

Mobile app's screen with an image right at the top of the screen and toobar icons on the top of it

The problem was not only in the image. I was not sure whether the title should be collapsible too. This is a disadvantage of not using a design tool, BTW.

Spend time figuring that out as well. But you know what? I eventually realized that the effort was not necessary because I could simply make it nicely appear on the toolbar when a user scrolls down. Moreover, I recently came up with a more nice and modern design solution that actually does not require a collapsing toolbar at all!

For sure, I gained knowledge and experience, but next time Iā€™ll try to be as lazy as possible. And Iā€™ll think twice when Iā€™m about to start something difficult Iā€™m not sure about.

Exploring other peopleā€™s projects

I thought it was a great idea to find out how certain features are implemented in other peopleā€™s projects. I know two open-source apps that are similar to what I want to build: uhabits and tasks.org.

But I discovered that finding the correct implementation takes lots of time cause the codebases are complex. You should jump through those classes and to actually understand how something is done there, you need to understand the whole structure. In addition, although these apps are native Android, people use different technologies that may be not suitable in my case.

So I decided not to waste time for now.

A bit of technical stuff

My app is going to heavily use some API that deals with time. So this week, I decided to learn kotlinx-datetime library. I hadnā€™t known how to work with LocalDates, Instants, and other things so I met these concepts for the first time.

I found out that whatā€™s very important in dealing with time is to store the time of events scheduled for the future in LocalDateTime instead of Instants. Thatā€™s because otherwise if some country decides to suddenly change their timezone (e.g. decides to introduce/revoke DST), my appā€™s notifications will tell the user the wrong time of the event. I even made a Github Gist with some notes on this library.

Why kotlinx-datetime when there is java.time? I want to first develop my app on Android and then expand it to iOS with the help of Kotlin Multiplatform. Even though kotlinx-datetime is yet alpha, I decided to use it, cause there currently is no other option.

My progress

Alright, itā€™s about time I summarized my performance this week.

My challenge

āœ… 6/5 tweets

āœ… 1/1 article (this one)

VCā€™s Healthy Habits challenge

ā˜‘ļø Make my app: worked for 44 hours (goal = at least 40h)

ā˜‘ļø Household: did at least 1 household chore 6 days a week

šŸ’¬ Physical activity: 4/5 activities

ā˜‘ļø Rest: had at least 1h each day

ā˜‘ļø Learn English: learned 42/42 new words

Iā€™m late for 2 days šŸ˜¬

I shouldā€™ve published this post on Thursday or Friday but while writing it, I came up with an idea of a simple learning app, which is not connected to the main one. Started working, and thatā€™s what I was unexpectedly doing during these two extra days cause I initially thought it would take 1 hour at most šŸ˜….

Taking into account that my performance was OK, Iā€™m gonna start over as if the 2nd week started now. I think I may do that (I hope so šŸ˜„).

This is also a great thing about this weekly challenge type. Though Iā€™ve messed up on the previous week, I have a perception that Iā€™m starting over on the next one, which gives me a bit more motivation.

Made a simple program for tracking my progress

So here is that program that took me two days (damn).

I like to visualize my progress with progress bars. Thatā€™s what this app is about. It allows users to enter a name of a routine and its progress, and displays it in a nice way. So here is how I roughly estimate mine for now:

A mobile app's screen with two lables and progress bars at the center: 1. Make my app ā€” 5%, 2. Learn android ā€” 40% . Other UI elements, such as screen title, FAB also present.

So, while I worked even more than planned, I didnā€™t do much actually. šŸ˜ I set a goal to make my app with basic functionality in two months but I think my pace is currently too slow. Yet Iā€™m happy that I already know about 40% of what I need to build this (not the whole Android, of course).

And getting back to the app, while making this simple layout is indeed not so difficult, I also decided to make it work properly and introduce the ā€œadd routineā€ functionality, which was a challenge for me. I will improve it later, making the code more optimized and adding a database cause now the data gets lost when you close the app. The code is available in this GitHub repo.

Anyway, making such projects are my favourite learning style. I watch tutorials and then apply that knowledge in practice right away while creating something that is actually useful to me and other people.

Improvements

So there are some improvements to be made in both my work and life.

First, I noticed that I donā€™t have a strict plan of what I should be doing at a time. So I just continue what I was doing the day before or come up with an idea and start working. This isnā€™t very productive in my experience. Iā€™d better create a plan.

I canā€™t really make a plan for building my app because Iā€™m doing it for the first time and vaguely imagine the next thing Iā€™ll have to deal with. But luckily, thatā€™s not true for learning. So Iā€™ve collected the necessary resources for the next two weeks or so and defined how much time I should spend on each. Iā€™ll also try to apply the gained knowledge right away in my project so I do have some kind of a plan for building my app either.

Second, I initially planned to do tasks in specific time blocks and not exceed the time of each. The challenge is that we usually have some distracting things that break our schedule. I found a solution to simply change the order of these tasks, which I call routines, and at the end, spend the planned amount of time on each. Honestly, I've completely failed with this one. Itā€™s quite challenging but I think this can significantly increase productivity so I tweaked my schedule and Iā€™ll try again.

Also allotted some time for daily review, reading, and writing articles, cause I now have 160 only in my DEV reading list.

Measuring time, not work

With all these improvements, Iā€™ll remember that Iā€™m not a superman to achieve everything.

Here is one productivity tip that works for me:

Measure how many hours you worked, not how much work you did.

Thatā€™s because, at first glance, you may appear not to have done much, but, in fact, this 20% that youā€™ve done contribute to 80% of the overall amount. Itā€™s especially relevant to programming, where you usually have to spend lots of time fixing a bug or reading code and not appear to be very productive.

BTW, thatā€™s why I donā€™t really understand people who advise to apply the Pareto Principle, cause if this law exists, you canā€™t avoid it whatever you did.

Of course, one may get distracted all the time and indeed not do much. Then this trick wonā€™t work. But Iā€™m sure thatā€™s not true about me.

Ending

Anyway, the takeaway from this week will be that contributing to learning and building in public is indeed helpful for me. I enjoy it and see the increase in productivity. Thatā€™s because if I didnā€™t share my progress, I wouldā€™ve quit the challenge in a couple of days. Thatā€™s how it used to be.

Alright, thanks for reading this article, good luck with your projects and see you later. šŸ‘‹

Top comments (0)