Engines and Gems: Destination. Not path.

Ten years ago, I wrote Component-based Rails Applications. Today, on cbra.info, I have this banner: "I consider the CBRA approach deprecated. Gradual modularization based on packages gives us all the benefits of components (and more) for much lower costs."

Gems and engines still play an important role, just not as the path but rather as the destination.

What is the modularization destination for large apps?

When talking to developers about gradual modularization, one of the questions is, "So... where are we headed?" That is, what is the destination of a modularization journey?

@leanpub FYI...

Message to Readers of Gradual Modularization

A message I sent to the readers of Gradual Modularization for Ruby and Rails regarding the new update published today.

Message to Readers of Gradual Modularization

A message I sent to the readers of Gradual Modularization for Ruby and Rails regarding the new update published today.

TypeScript's superpower

In his post When Static Types Mask Code Smells Jared White reflects on a discussion about TypeScript and makes the case that static typing isn't a panacea. It does not fix all your code problems. Indeed, it does not!

Gradual Modularity: Chapter 6 is out!

The message I sent to folks who bought Gradual Modularization for Ruby and Rails about the publication of Chapter 6!

Gradual Modularity: Chapter 6 draft available!

I have dragged my heels long enough! That's why I pushed publish on the first complete version of Chapter 6: _Managing Privacy Violations_ while I am having it proof read at the same time. Check it out at https://leanpub.com/package-based-rails-applications!

Can I tweet from here?

Just testing whether I can tweet from here...

This post is following https://brid.gy/about#webmentions to publish a tweet automatically. Let's see!

Can I tweet from here?

Testing some more. So that seems to work... Let's check a link back to here.

This post is following https://brid.gy/about#webmentions to publish a tweet automatically. Let's see!

Rails Apps Size Tests

Want to generate some quick stats for the size of your Rails app (and likely some of its problems)?

These are the queries I used to generate graphs for some big open-source Rails app for my 2014 RailsConf talk Refactoring towards Component-based Rails Architecture.

Gradual Modularity changes from recent Ruby, Rails, and packwerk updates

How do Ruby 3, Rails 7, and packwerk 2 affect the source code for Gradual Modularization for Ruby and Rails? Let's find out!

If you find yourself in a hole, stop digging

There is this thing called the law of holes[^1]. It's interesting...

3 Ways I Am Changing How I Publish The Gradual Modularization Book Starting Now

My recent experience of publishing 30 atomic essays in 30 days[^1] failed in one way: I only got 25 articles out. I succeeded in most other ways and will apply my learnings from this time to how I work on and publish Gradual Modularization for Ruby and Rails[^2].

Should Product Development Teams Be Done With The *Definition Of Done*?

I recently came across a very practical application of the analysis of agile vs post-agile[^1] in a simple observation from a new team member: "It seems like our definition of done is really unclear."

Software Engineers Beware: Even Instantaneous Migrations Can Bite

This is an old example, but a good reminder: even instantaneous migrations can bite you in the ass. Be careful.

Naming 3 types of technical migrations to make us better at tackling them

The cost and benefits of technical migrations are hard to pin down. Discussing them efficiently is also difficult without properly understanding what we are talking about. This article creates a nomenclature to help with this.

Make Your Self-hosted Website Come To Life By Connecting It To Your Social Media

I have always felt like I wanted my web content to be on my website. I have also always felt that my website is a pretty lonely and inactive place.

Three Ways Engineering Leaders Evaluate Team Performance

A 2 minute detour in a conversation with my mentor at my work, Gusto (we're hiring... a lot[^1]!), connected the dots on big trends in the software industry that are so foundational, I am embarrassed to say, I missed them.

Your Way of Doing Something Might Just Be a Book! Even If You Are Not Stacey Abrams

Go read Stacey Abrams' Lead from the Outside[^1].

Founders of #ship30for30 should do one thing to make their course (and their students) better

All our thinking stands on the shoulders of giants[^1].

Zettelkasten VS Atomic Essays

Zettelkasten VS Atomic Essays? More like Zettelkasten AND Atomic Essays!

How I use Joplin for managing my to-do list

I have tried many to-do list applications and systems. They were all too complicated.

5 plugins turn Joplin into a powerful and customizable Zettelkasten

In 1992, Niklas Luhmann, a German sociologist who published over 50 books and over 400 academic articles, published Kommunikation mit Zettelkästen about his use of the Zettelkasten method - explaining how it made him so productive.

To get smarter at what you do, make sure you _process_ what you read (using Joplin) - in 4 short steps

6 years ago I read this beast of an article titled "How to Use Evernote for Your Creative Workflow"

Switching to Joplin will transform your daily note taking

There are a bunch of note taking apps that seem pretty hip right now. The most en vogue might be notion and obsidian. I want you to known about a lesser know, open source alternative called joplin[^1].

Are windows with notes littering your screen? Do you loose them? Does it feel chaotic? We can fix that with one small change!

I still regularly find my screen getting cluttered with random notes, but I am getting better. In fact, just today I deleted the TextEdit app from my mac so I won't use it ever again. Let me tell you why. And, let me tell you how to fix your note taking.

Never able to find that zoom link fast enough? Always late to the next meeting? Use MeetingBar!

MeetingBar is for you if you use a calendar and you regularly participate in video calls[^1].

Still using your mouse for window management on macOS? Stop! Hammerspoon!

Hammerspoon[^1] boasts two things: a truly epic project name and a lua scripting environment that hooks into extensions that allow you to control system functionality in macOS.

2 ways homebrew for macOS is ... even better

Homebrew[^1] describes itself as "The Missing Package Manager for macOS (or Linux)." The program primarily installs command line applications but through its various extensions is, in my opinion, the best way to install and long-term manage applications on a Mac.

My 3 favorite ways to use Alfred

Alfred[^1] is a productivity app for Mac. It "boosts your efficiency with hotkeys, keywords, text expansion and more." For anyone who doesn't use the keyboard much to navigate around their system it will take some getting used to. But once you do, whew! Are some things much more straightforward to do!

The one reason that Gradual Modularity is relevant for all languages is totally backwards

If you have read any of my posts about gradual modularity and thought "well this is only interesting for those folks who messed up their (Rails) apps on their own in the first place," read this post. I don't believe that is true: Gradual Modularity can benefit engineers working in most languages and frameworks.

Gradual Modularity - A definition attempt

Yesterday's attempt at a concise description of what Gradual Modularity is[^1] fell short of being a definition. Here is another attempt at that.

Webmentions test page

Three reasons why the one legitimate criticism of Gradual Modularization falls short

I have found one criticism of gradual modularity that resonates:

Gradual is really just somewhat. This whole idea has no teeth and won't lead to actual change with positive impact.

FactoryBot - Feeding the beast?

ActiveRecord (AR) is the main driver of incidental (read: superfluous) complexity in your app. Do not feed the beast.

Can we improve how we test software using information theory?

Try to hold these two ideas in your head

Flakes are a systemic problem that require a systemic response

expect(rand(100)).to be > 0

You should want more data out of your (flakey) tests

If you are working with a large codebase, then you are likely dealing with test flakes. Flakes? Tests that, ever so often, report a failure where no relevant change to the system has happened. Google seems to think that a certain amount of flakes is unavoidable[^1] and I agree.

The one big difference between writing and writing NOW

So, I started this thing... "ship 30 for 30"[^1] after seeing a couple of nice posts by Matt Stine[^2]. Really, we haven't even really started yet. The first post is to come out Saturday, but in trying out this editor we're going to use throughout the course on thing struck me: In order for me to do this successfully I will to switch from writing to .. writing NOW.

Gradual Modularity

When shopify released the tool packwerk they did more than just open source a utility they had been working on. They changed how we should think about application modularization.

Except where otherwise noted, content on stephanhagemann.com is licensed under CC BY 4.0 by Stephan Hagemann