The 30 seconds rule
There are a lot of memes on Software Engineers spending more time automating tasks than doing them.
I got a personal rule for that.
Anything that separates me from creating content (software, blog post…) or learn something should take less than 30 seconds.
Collecting Knowledge
Reading a post, a book, listening to podcasts or watching videos help me understand concepts, point of views and important names (of personalities or companies). I like reading about a lot of topics: Computer Science, AI, Security, Tech Business, Science, Philosophy, Ethereum… Reading on a lot of topics mean collecting content from a lot of sources and this can usually be overwhelming, especially because we may never know about certain blogs or authors and miss great sources to learn from.
I usually read ~30 minutes a day, and want to maximize my reading time by reducing my content searching time.
Aggregating sources
This step is the first thing I implemented after defining my 30 seconds rule. I felt quite overwhelmed by this task: it’s hard to check more than 10 sources on a daily basis to find great content.
There are 4 types of sources:
- Sources I know, blogs or newsletters I want to read, they produce great content and I want to read almost everything from them.
- Sources I don’t know yet, but that produce great content I should read.
- Aggregator of Sources, like hackernews, where content is promoted by a voting system, updated on a daily basis.
- Transformed Sources, The Information for example, that produces content summary / analysis of other content sources.
My solution to aggregate these sources is quite simple:
- Create an inbox from rss feeds, project available here and my inbox here. This is pretty straightforward: I define in a config file what rss feeds I want to read and in what proportion, then it displays a list of posts from those sources. I use the multireddit feature and sources like hackernews and lobsters to aggregate content from sources I don’t know yet. When I discover a source I want to read more, I just add it in my config file. I set my inbox as my web browser homepage and check it every morning when I start my computer.
- Create a dedicated email address for newletters, to follow all sources I want to read from on a regular basis. I check this inbox everyday while opening my email client.
Taking notes
To take notes on my reading I don’t follow any particular rule or method, I just write down parts of articles / ideas that seem interesting to remember.
To do so I use Obsidian, a tool that helps connecting all the content I write with keywords (like Wikipedia). This is really useful to
- remind me of something I wrote when I’m taking notes on a similar topic
- take little notes (~10 lines per post) but still find it in the future when working on the same subject
While taking notes, I try to be really careful of indicating the source and the author, to make it easier to search further the topic in the future, and to connect keywords ([[keyword]]
in obsidian) to connect my notes in a smart way.
There is also an excalidraw plugin for Obsidian that is really useful to make some schemas on the go and edit them later.
Writing
Writing is really useful for me to understand in depth a concept and to have access to it easily for future work. For example, I often refer to the my Ethereum validator post when I want to get back to a reward formula. I mostly write on this blog and on friends’ sites but do not have a lot of time to do it, so I want to maximize my writing time and not lose time on deploying a post, setting up preview version to get feedbacks etc.
I use Hugo for my blog as I am used to writing things in Markdown and as I find it really easy to configure and customize.
Publication
To publish this blog, I use vercel which has 2 really cool features:
- It is connected to GitHub and every commit triggers a new deployment, which means that I can fix a typo and see the changes live in ~20 seconds.
- Feature branch preview, meaning that when I write an article on a branch, it is automatically deployed to a custom url and I can give it to friends for review before merging it to main, and therefore deploying it on the production website.
And the great thing about all this is that it’s free.
Project Development
Most of the project ideas I had usually died before I even make a prototype, because it can be really time consuming to make one. Since a few months, I try to reduce this “starting” time to start coding right away the core features of the idea.
Bootstrapping
To fasten the bootstrapping of my projects, I mostly use templates. For example, a project usually involves having an API with account and session management, email verification, documentation and testing. To fix this, I have a private template that implements all of this. When I need an API for a new idea, I just start from that template and focus the main features I want to build, not the authentication flow that can sometime take a lot of time to build.
What is great with this method is that my templates evolve with time: I can add new authentication methods, make deployments utilities etc.
Finally it’s also really easy to add test and documentation to those templates, as there are already there, I just have to copy and adapt them to the feature I’m building.
Deployment
For deployment I mainly use:
- Vercel for frontend and serverless, as we have seen above this is a really cheap and fast way of managing deployments on multiple projects
- Scaleway for cloud services (instances and cloud databases), just need to click to have an instance and start playing with it
Deployment depends a lot on the need of my projects, but using mainly those two services help me have everything in the same place, and replicate projects configuration between similar projects, which help me gain a lot of time.
I also have a private repository with template configuration files, nginx reverse proxy for example, to setup quickly a basic infrastructure for my applications.
Conclusion
This post was short but helped me illustrate this 30s rule I try to commit myself to. I will add new sections in this article when I see another usecase of this.