I started working with Rails 13 years ago (v 3.0), and have used it almost exclusively since then. In that time, I've easily worked on 50+ codebases in some form or another, and seen every library and pattern under the sun on small and large teams. What's remarkable is that, while Rails itself has changed a lot in that time (we're now at v 7), the underlying fundamentals of the web have changed remarkably little, and the approach I now follow for building apps with Rails would have been completely possible with the first version of Rails I learned, way back in 2010.

The crux of my approach is this: Web apps are built around HTML. Browsers are extremely good at fetching and displaying HTML - so that part is taken care of for us. Additionally, relational databases have been around for a very long time and do their job - storing and retrieving data - very well.
So without Rails, as programmers we already have out-of-the-box solutions for storing data, and for delivering HTML. What we don't have is a way to combine them both - to hydrate the HTML with specific data based on what user is requesting it.

As demand for programmers seems to continuously exceed the supply, it's generally believed that in order to be a coder, one must be Very Smart™ . And yet HTML - the bedrock around which all of this software is built - is actually very approachable and easy to learn: So much so that children and adults can understand and learn the basics in a day. This is a remarkable fact.
As someone who's spent a lot of time dealing with the pain of finding and hiring software engineers, I've thought a lot about why it's so difficult. The result of that thinking can be boiled down to the following bullet points;
Holding that the only necessary complexity to building web software - beyond knowing How HTML Works and How Databases Work - is knowing how to hydrate html with the contents of a database, we can infer that the rest of the complexity is incidental complexity.
Most of the incidental complexity comes from 1. Tooling, and 2. Framework-specific concepts.
As a result, when hiring developers, the primary thing we're evaluating is their existing technical knowledge.
What if we think of Rails not as "Rails is a large framework for building complex web apps, whose libraries and patterns (hotwire, stimulus, turbo...) need to be studied", to "Rails is a way to access a collection of utilities that make it easier to work with HTML"
At this point I've worked with dozens of people using this approach, who had little to no prior rails experience, who were able to understand non-starter codebases after just a few hours. One exercise that helped was drafting up a cheat sheet with some of the most common code snippets. For people who have some web experience but no Rails experience, simply reading through this is a psychological-barrier-lowering exercise.
A simple way to specify routes
# config/routes.rb
Rails.application.routes.draw do
get "/info" => "site#info", :as => "info"
end
<a href="<%= info_path %>">Build</a>
A simple way to handle identity
gem 'devise'
before_action :authorize_user!
if user_signed_in?
do_something
end
A set of simple helpers for building html templates
<div id="menu">
<%= render :partial => "common/menu" %>
</div>
A simple, secure way to work with a database
user = User.new
user.first_name = "Tony"
user.save
user.valid?
user.errors.full_messages
people = User.where("location = ?","ireland").page(3)
<%- @people.each do |person| %>
<h1><%= person.first_name %></h1>
<img src="<%= person.image.url %>"></img>
<% end %>
A simple way to access and use data submitted by forms
params[:first_name]
The above code snippets cover a surprisingly large amount of the code that's needed to build simple software.
With the baseline approach of "Let's center html and minimise the learning curve of everything else", we also landed on a few more somewhat surprising conclusions. They became so long that we moved them into a separate post - Friendly Rails guidelines
See my opinions on the very real and very painful developer hiring problem.
See our adventures in Remote Development, which totally remove a whole class of environment and infrastructure setup issues.
We created static-tailwind, which includes most of the utility with none of the compilation. There is a performance implication, so it doesn't work in all cases, but in most the hit is unnoticeable.
I feel you. If that's more important for you, then don't follow the advice in this article.
This is a paragraph that goes on for quite a while in which i talk about various different things, you know
This is a paragraph that goes on for quite a while in which i talk about various different other things that you may or may not find interesting
Few bullets
Super
This is another paragraph