My Shape Up break allows some housekeeping, so I updated a couple of my coaching and content shop items:
- Added an office hour for developers who are interested in memory techniques and how to apply them in their day-to-day: Memory Training
- Added a new workshop to the coaching portfolio: 1-on-1 premium TDD workshop
- Summarized where to find my current, future, and past contributing self on the Internet: Meet Rich
By the way, I've started reading the Shape Up book. It has a lot of insights, even for your indie hacker endeavors outside of working in a team. Check out its free PDF version if you'd like to give your side projects a new spin.
Here are a couple of thoughts I had on the way:
- Shape Up feels good because it gives you a structure to get out of what might sometimes seem like an endless hamster wheel of side projects.
- It makes you ship or kill projects instead of prolonging them forever or jumping between shiny things.
- An essential piece of Shape Up is the shaping phase, where you define the project. The project plan needs to be not too abstract but also not overly specific (like a 100% end-to-end wireframe). Most personal projects fail because their definitions are too abstract, i.e., "I'll build a TODO list app. Hold my beer!"
Shape Up for individuals looks very much like Shape Up for small teams:

You are a one-person-army transitioning fluidly from phase to phase.
In contrast, Shape Up for established companies has the shaping and the building phase run in parallel:

I've restarted the local barcelona.rb group again. It's a soft launch with some relaxed discussion round tables. Building up towards the more common formats with speakers and coding sessions if requested, wished, and needed:
Do you find rubocop annoying sometimes? I certainly do! 😅
I usually add rubocop only later in my personal projects. Or I'm adding the Standard gem if I know it will be a collaborative project from the start.
But in the projects where it's enabled, more often than not, it saves me from costly mistakes and ugly lapses by giving me a lefthook
, not letting me commit 🥊 (checkout the lefthook
gem)
In which case, I always think:
"Thanks, rubocop 🤗🥊🤖"
Here are a couple of examples from this week:
Prefer double-quoted strings inside interpolations.
OK, this is a trivial one, but I was surprised about why I like rubo's suggestion.
raw("<span class='label'>#{t('user.wish.premium')}</span>")
vs
raw("<span class='label'>#{t("user.wish.premium")}</span>")
Useless assignment to variable.
If you defined some sort of an account=
setter at this point somewhere for some reason, this could end up in an ugly debugging session.
# before
setup do
@current_account = account = FactoryBot.create(:account)
end
# after
setup do
@current_account = FactoryBot.create(:account)
end
Use attr_reader to define trivial reader methods.
I needed to overwrite a devise helper in my own helper to make it usable and testable there, so this saved me a couple of lines:
# before
def current_user
@current_user
end
# after
attr_reader :current_user
Thanks 🤗