April 12, 2022

Focus, and how to find it

In my life, I have often been spread way too thin between multiple ideas, projects, or just stuff I want to do. Because of that, I always have done less than what I am capable of doing.

In his talk, Hammock Driven Development, Rich Hickey starts by posing a series though provoking question:

When was the last time you thought hard about something for

  • An hour ?
  • A day ?
  • Over the course of a month ?
  • Over the course of a year ?

I've always wondered what I should be focusing on. Is that the real question though ?

I think I'd rather wonder what I want to focus on.

Then choose something, and look at nothing else for a few months.

Obviously, if you're like me, the appeal of the shiny shiny new topic to explore is very strong, and makes this very difficult. Can I find a way to simply focus on one thing, and accept that all the others will go on the wayside for now ?

I think the first element of an answer is to create a deadline to revisit what you are focusing on, so that you can free your mind of whether you're focusing on the right thing or not. For example, review your current focus every 3 months. During this time, only focus on going deeper in the topic you are currently exploring. That means deliberate practice, with an actual goal, and something you will try to create during those 3 months. That also might mean writing about the topic, for yourself and for others for 3 months, about the experimentations you have made, for you to understand more deeply.

You might not end up creating something that has any value, but if you have a better grasp of the topic at the end of the 3 months, then you have made progress.

A first iteration on the process

Here is a series of steps you can go through for your focus

At the beginning of the period, start by

  1. Sit down, and write down the focus you want to work on
  2. Is this topic too big or too vague ? Should you focus on something more specific ?
  3. Write down a concrete goal you want to achieve for that focus during your 3 months
  4. Are there some elements I should be learning to go along with this focus ?
  5. Start working on it, drawing the large outlines

During the focus time, ask those questions

  1. Is what I'm currently doing completely in line with the focus I chose at first ?
  2. Do I know what are the next steps ?

At the end of the period

  1. What did I learn exactly ?
  2. What did I produce ?
  3. Do I want to spend more time focusing on this topic ?

This is a first iteration on what I think would be an interesting process to actually focus.

Applying this process

Let's take two concrete examples, because I want them to be from quite different fields. Let's say I want to

  1. Understand better event-sourcing
  2. Become better at marketing

Let's go through the initial phase for each of those focuses

Understand better event sourcing

Is this topic too big or too vague ?

That seems like a good topic to get started with. It feels specific enough to be interesting and not go into too many different directions.

Concrete goal

I want to create a simple, CLI based, event-based system that could demonstrate the advantages and drawbacks of event-driven design. It should have:

  • At least one event log
  • At least one projection
  • (optional) snapshots

It will be a dummy example for authorizations assignments within a company, with no actual external authorization changes.

Extra elements to learn along

  • Basics of Domain Driven Development
  • What is the difference between event-sourced and event-driven ?

Become better at marketing

Is this too big or too large ?

Absolutely ! What is actually marketing ? There are different topics I might want to tackle.

Here are a few I can think about

  • Landing page improvements
  • Blog posts marketing
  • Outreach to help others with your product
  • Getting your first followers / customers / people who will look at what you do with interest
  • Getting your project or idea in front of people

With those ideas, and even if that does not actually end up fitting into marketing, I will choose the last option to actually refine the initial idea.

New focus: Getting my project in front of other people

Is this too big or too large ?

Seems narrow enough of a focus that I can find a concrete goal for it. However, which project am I talking about ?

Concrete goal

Getting 50 people per day visiting a landing page that I have created.

Is that a good enough goal ? Does it fit with the focus that I have ?

For this one, it is actually a bit fuzzy for me. I cannot clearly say if this goal makes sense because it depends if there actually is a market for what I would be trying to offer. Since I don't know that, and I am still looking for a topic to market, an other idea popped into my head.

I can instead focus on getting more visibility on my profile, in a field that I think I want to work in, and try to get as much engagement with a newly created audience as possible.

Let's switch focus again then.

New focus: Driving engagement in the community I think I want to work in

Is this too big or too large a focus?

That's good enough. It can be measured with the amount of conversations you have, and the amount of people who end up following you. (although the follower count is more of a vanity metric).

Concrete goal

Let's first define the community I want to work in. I know that I want to work in tech, more specifically with exploring different patterns of software architecture and what they imply. I also want to be able to explain things that are not simple but very often used, like authentication. I want to be able to program daily, because it is fun, and most likely with either Rust, Elixir, or Common Lisp. I know almost nothing about all of those.

TBH, I really like that rust and common lisp can be very lightweight, although they include complexities elsewhere. I prefer to get the complexity upfront for gains down the line (in debugging, performances, resiliency and capabilities) instead of having to be woken up at 3 in the morning every week because something broke in prod. Maybe what I want to create is a website. Maybe it's something else. We'll see where that leads. The good thing with a website, is that it is more easily usable (if designed well), and does not require anything from the end user PoV. The drawback is that it requires a lot more knowledge and has a lot of moving parts that make learning slower.

Two main options

First, I go with Rust, and look at helping companies that are trying to be big(-ish) and keep their code maintainable for a long time. They should have quite a good amount of money, and their tech stack is already chosen. However, they already will have experienced developers that will probably not need any help with the topics I would offer at first.

The other option is to go with Common Lisp and help solopreneurs that want to spin up prototypes very quickly. They have less money (if any), and there are not that many that would choose to go with a Lisp unless they are very interested in computers.

In both cases, I don't see that my beginner point of view could be of any help. So I need to find an other approach.

An other approach

I think that my best option is to go with Rust anyway, because of the hype it has. I could benefit from it, especially in the coming years where it will become more and more popular. CL on the other hand is usually seen as some arcane tech, unless you talk about it with people in the know. It might be something interesting to offer my community later, but not at first.

One approach I see following that is to start by addressing the need of beginners in big companies, who want to try out a new language and see what it has to offer. The good thing with this approach is that I can then use it to introduce other concepts or languages as well, on top of Rust.

I don't think that could work now, because I would like to work on a lot of "solved" problems, like auth and pagination, and explain them throroughly. I don't know that someone with experience wants to learn about that. It has to be for developers with intermediate experience in programming in general, who knows about the concept, but does not really know how they work under the hood, how to implement them, or how long they should expect it to take to implement in the product they are working on. I think there are some people in a lot of companies, small and big, who are like this. However, this will only apply to the ones who really want to improve on their craft, and not only those who just see it as a job.

Then the community I want to choose is the community of intermediate programmers, who really love to hone their craft, and want to learn more about how the basic building blocs of their libraries and frameworks work. They want to learn how the whole system works, and want to be able to implement at least basic version of those systems in Rust.

Concretizing the goal

With this community in mind, I will need to choose a single platform. I will obviously need a blog, because those posts will end up being quite long, but also a social media platform. The people from the community I just described are going to be found on Twitter mostly. They often look at HackerNews, and maybe Reddit, although there are not a lot of interesting things there. They will probably read other blogs, like Martin Fowler's one, and have an RSS flux for the blogs they like to read. If they receive newsletters, it better be amazing for them to read, or they will just be fed up and delete them, maybe even unsubscribing in the process. However, mailing lists are the core of building a community, so I want to build onto it.

The goal then will be to grow a mailing list to 50 people. This will give me a good starting point for a new community.

The system will be composed of:

  • A Mailing list
  • A blog

Every blog post will be going onto HackerNews, and hopefully start to feed into the mailing list. Every post will also be sent to the mailing list when it gets published.

Some elements I should be learning

What is related to the field that I want to work in. That's where it gets tricky. Because I will have to write about topics I would not know about that much, it would mean that I need to divert my focus from the original goal. But if my goal is to grow my audience, I also need to grow myself, and bring interesting topics into the mix, meaning that I need to explore those.

I saw some people doing 1 week programming 1 week marketing (like https://twitter.com/yongfook). Maybe for that it would be appropriate, but it just goes against the full 3 month focus period.

Is that just the life of a solopreneur ?

Back to the beginning

Remember that at first, I started by wanting to learn marketing.

Now, I have a goal to grow a mailing list to 50 readers in 3 months by posting interesting articles on my blog about web programming and its boring concepts in rust, from a beginner's point of view.

Which one do you think is more achievable ?

Last thoughts

As you can see, it's not as straightforward as a "simple" process would let you believe. Depending on the goal, you might not be able to "just" focus on one thing, although that could still be debated. When trying to grow my audience, what's more important ? I would say great content. And if I'm learning, then it should be great content on what I learned destined for beginners.

Copyright Marin Gilles 2019-2022