thoughtbot Blog
robots.thoughtbot.com · Company blog · on HN since 2007
thoughtbot's engineering blog covers Ruby, Rails, Elm, Phoenix, vim, git and other practical tips from its consultants.
What HN saysCommenters praise it as a really good blog with small, practical tips and link its posts on commit messages, Elm and taking a codecation.
441HN people shared it
150linked it in comments
660stories submitted
6.7Kstory points
4 months agolast shared
2007people per year2026
Most-shared posts
- 1How We Replaced React with Phoenix10 people · 95 points · first shared 2016 · 10 comments on HN
- 2A tmux crash course (2016)6 people · 48 points · first shared 2014 · 12 comments on HN
- 3Lucky, an experimental new web framework by thoughtbot5 people · 26 points · first shared 2017 · 1 comments on HN
- 4Arduino-Based Bathroom Occupancy Detector5 people · 14 points · first shared 2014 · discussion on HN
- 5Homepage5 people · first shared 2022
- 6Homepage5 people · first shared 2014
- 7Replace CoffeeScript with ES64 people · 355 points · first shared 2015 · 168 comments on HN
- 8Async Ruby on Rails4 people · 26 points · first shared 2024 · 3 comments on HN
- 9The magic behind configure, make, make install4 people · 18 points · first shared 2019 · 1 comments on HN
- 10Analyzing Minard's Data Visualization Of Napoleon's 1812 March4 people · 9 points · first shared 2014 · discussion on HN
- 11Brewfile: a Ruby Gemfile, but for Homebrew4 people · 7 points · first shared 2014 · 2 comments on HN
- 12Sandi Metz' Rules for Developers4 people · 2 points · first shared 2014 · discussion on HN
- 13Homepage4 people · first shared 2015
- 14A Tmux Crash Course (2011)3 people · 183 points · first shared 2011 · 84 comments on HN
- 15The Durable Document Store You Didn't Know You Had, But Did3 people · 87 points · first shared 2011 · 20 comments on HN
What HN people wrote when they linked it
kaishiro · 2017-04-21
Thoughtbot, in addition to having a really good blog, is at least in the running for one of the best names (Giant Robots Smashing Into Other Giant Robots).
https://robots.thoughtbot.com/
I love it because the articles are often small, one off tips re: vim, the command line, ruby, etc. Really neat stuff.
marcomassaro · 2015-02-02
Masswerks (http://masswerks.com) - Remote (USA preferred) - CTO
Masswerks is a design and development consultancy for startups, high growth and enterprise companies.
We've worked with companies like TalentBin (acq. by Monster), BuddyMedia (acq. by Salesforce), Frid.ge (acq. by Google) and many more.
Up until now, most of our work has been focused on the front end - UI/UX and html/JS. We're looking to expand into software and need someone technical to lead us.
We love what http://thoughtbot.com and http://mojotech.com have created -- a go to software consultancy for building great products. We have the design down, now we need someone to help us on the technical side of the business.
- Experience building web apps in RoR (Node, Python are great too)
- Can deploy, monitor, maintain and launch web applications for clients
- Fully remote, preferably located in USA.
This will start as a contract role. Ideally we're looking for someone who's also interested in becoming a long-term partner to grow the business into a great software consultancy.
Interested, email your portfolio, Linkedin and/or Github to [email protected]
jweir · 2024-05-15
Elm makes great use of these, for example in the Units package:
https://package.elm-lang.org/packages/ianmackenzie/elm-units/latest/
Very nice to prevent conversions between incompatible units, but without the over head of lots of type variants.
https://thoughtbot.com/blog/modeling-currency-in-elm-using-phantom-typ…
wrkng · 2022-01-25
There was an earlier version of this back in the early 2000s, and I was a subscriber then: https://thoughtbot.com/blog/umbrella-today
al2o3cr · 2021-12-19
FWIW, Boston is where Thoughtbot is headquartered; their apprenticeship program might not be exactly what you're looking for, but they also have a lot of useful introductory resources.
https://thoughtbot.com
masonforest2 · 2021-11-01
Location: Charleston, SC
Remote: Yes
Willing to relocate: Probably not
Technologies: Rust, Elixir, Ruby, Blockchain, Solidity
Résumé/CV: https://docs.google.com/document/d/1RK7hqiLKhMhXcopzG8oKDGhCYOc3H3M1nJ…
Email: [email protected]
Hello,
After working at [thoughtbot](https://thoughtbot.com/) for five years I just finished building my own blockchain. Moonshine Exchange has realtime transaction settlement and pulled in >$100K in liquidity organically without any outside funding. I'm looking for my next gig, not necessarily in the blockchain space. Rust and Elixir preferred but open to any technology!
robenkleene · 2021-06-01
Vim has supported jump to definition via `ctags` for decades, works great for Ruby. Here's a tutorial from ThoughtBot (https://thoughtbot.com/upcase/videos/intelligent-navigation-with-ctags…
Vim also supports the same LSP implementations that VSCode uses via Coc.nvim (https://github.com/neoclide/coc.nvim), which provides the same code navigation features that VSCode has, including jump to definition.
geospeck · 2019-09-24
Another useful source for learning Tmux that helped me a lot is the free videos from Upcase[1]
They even show how to use Tmux with Vim which is my favourite setup
[1] https://thoughtbot.com/upcase/tmux
r00k · 2018-03-05
I do trips like this every few years. I can hardly recommend them enough.
I wrote about my specific recommendations here: https://robots.thoughtbot.com/you-should-take-a-codecation.
npsimons · 2017-10-26
My personal favorites on the topic:
http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
https://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-messag…
malloryerik · 2017-08-24
This would all be magnified greatly if Elm Native were solidly production-ready.
https://github.com/ohanhi/elm-native-ui
https://robots.thoughtbot.com/elm-native-ui-in-production
tgragnato · 2017-03-19
There's one pretty famous and you may already know it.
> Ruby is a language of careful balance. Its creator, Yukihiro “Matz” Matsumoto, blended parts of his favorite languages (Perl, Smalltalk, Eiffel, Ada, and Lisp) to form a new language that balanced functional programming with imperative programming.
> He has often said that he is “trying to make Ruby natural, not simple,” in a way that mirrors life.
> Building on this, he adds: Ruby is simple in appearance, but is very complex inside, just like our human body.
These will not be considered strictly scientific articles, but appear reasonable..
[http://carlosplusplus.github.io/blog/2013/08/01/ruby-and-the-japanese-… - [https://robots.thoughtbot.com/learning-japanese-the-rubyist-way]
ianzabel · 2015-07-01
thoughtbot - Web Developer - Chicago, Austin
Build great products while contributing to our community with open source, writing, speaking, events, and more. Our team works in a relaxed and educational environment. We use the latest technologies and embrace agile philosophies. Everything we do is predicated on having a great team and a culture of learning. We work a sustainable pace of 40 hours/week, consulting for clients four days/week.
Apply at https://thoughtbot.com/jobs/web or email me at ian[at]thoughtbot.com
ahuth · 2014-11-10
It's interesting that Hound itself is a Rails app [1]. And it seems to be really well organized / put together. Thoughtbot is definitely following Sandi Metz's rules for developers [2].
There are a lot of small, plain Ruby classes that are very easy to understand. Must be relatively easy to maintain and add new features.
[1] https://github.com/thoughtbot/hound
[2] http://robots.thoughtbot.com/sandi-metz-rules-for-developers
midgetjones · 2014-08-07
This.
There's some good thoughtbot posts on the subject:
http://robots.thoughtbot.com/a-tmux-crash-course
http://robots.thoughtbot.com/seamlessly-navigate-vim-and-tmux-splits
http://robots.thoughtbot.com/love-hate-tmux
eik3_de · 2014-04-04
great.
next up: a well-written & concise guide on writing proper commit messages.
could be based on http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html and http://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message
JangoSteve · 2013-02-15
This is pretty cool. There are some other companies that have released similar tools in the past. I personally tried out:
* Thoughtbot's laptop script - http://robots.thoughtbot.com/post/8700977975/2011-rubyists-guide-to-a-…
* Lunar Logic's Lunar Station - https://github.com/LunarLogicPolska/lunar-station
* Pivotal Labs's Pivotal Workstation - https://github.com/pivotal/pivotal_workstation
I personally liked Pivotal Workstation the best, as it had the best combination of robustness, pre-built recipes, and easy configurability. I'll be excited to take a look at Boxen the next time we bring someone into our team.
aculver · 2012-06-11
That's always an option, like we saw with Airbrake being acquired from Thoughtbot by Exceptional. (http://robots.thoughtbot.com/post/17212734809/airbrake-acquired-by-exc… However, this really only works if you can find someone you trust enough to uphold the same level of quality in the product, branding, and customer service, since any future failure will still reflect negatively on the original developers for some time. I think open sourcing the underlying technology is a great way to allow other folks to pick up where the company left off. (We also saw this recently with Copycopter, which was from the same company as Airbrake. http://robots.thoughtbot.com/post/19388751626/copycopter-is-now-open-s…
hgimenez · 2010-12-25
akephalos is also worth a look, as opposed to env.js. We've had much better support for things like jquery live() using (a slightly hacked) akephalos: http://robots.thoughtbot.com/post/1658763359/thoughtbot-and-the-holy-g…
thomasknowles · 2010-12-10
If you have trouble accessing the site just use:
cache:http://robots.thoughtbot.com/post/2166174647/love-hate-tmux
in Google.
davidmathers · 2009-09-15
"I'll come out of the closet about this and just say what everyone knows: If the DataMapper community had more of a focus on addressing known, ticketed, reproducible bugs and less on pouring thousands of man-hours into writing specs it would be usable today. Frankly, I would recommend against considering it for your next project in the strongest terms possible.
Considering I created the project, nursed it through it's first couple years of development, and invented patterns like Strategic Eager Loading and Lazy Loading Contexts, which no other O/RM has to this day to my knowledge, that should say something. It's an epic fail of a project at this point."
-- Sam Smoot
http://robots.thoughtbot.com/post/162764036/why-do-rubyists-test-so-co…
AIorNot · 2024-12-25
The FUNDAMENTAL aspect and nature of ALL Software Engineering is: "Controlling Complexity" I dare say its the most important part of the "Engineering" in software engineering. 'Cognitive Load' is another way of saying this..
1. programming => wiring shit together and something happens
2. software engineering => using experience, skills and user and fellow engineer empathy to iterate toward a sustainable mass of code that makes something happen in a predictable way
It is exceedingly difficult to do this right and even when you do it right, what was right at one time becomes tomorrow's 'Chesterton's Fence' (https://thoughtbot.com/blog/chestertons-fence) , but I have worked on projects and code where this was achieved at least somewhat sustainably (usually under the vision of a single, great developer). Unfortunately the economics of modern development means we let the tools and environments handle our complexity and just scrap and rewrite code to meet deadlines..
I mean look at the state of web development these days https://www.youtube.com/watch?v=aWfYxg-Ypm4
wpietri · 2023-07-14
> I’ve worked at companies in the past where frontend is looked down upon because all of our leaders are backend/infra people.
I think there's a lot going on here, but one of them is definitely gender. Front-end development is often feminine-coded and seen as lesser. E.g.:
https://thoughtbot.com/blog/tailwind-and-the-femininity-of-css
I also think in tech-land we tend to associate leadership with male-coded traits. So it's not shocking at all to me that leadership and front-end backgrounds are often seen as somehow incompatible.
And I think that same sort of gender dynamic is relevant to the code, too. For me, part of what makes for good code is that it's good for others, good for collaboration. But if you're going to be a macho big-swinging-dick alpha nerd tech bro, then that can involve performing genius via solo cowboy coding. There the goal isn't to work closely with a team to make something together, it's to be a visibly amazing IC with upper management written all over him.
MakerSam · 2022-02-04
I agree that Rails has a kind of a steep learning curve. Also agree that I didn't find the Rails Casts helpful - I found them out of date, so I didn't spend any time watching them.
For me, learning how to learn a new thing at times seems like the hardest part for me. For Rails, the best I've found is the Michael Hartl tutorial [1]. He walks you through setting up a blog with Rails - first the quick way and then the hard way, so you walk away with a nice understanding. He keeps the tutorial up to date and he's been available for questions when I've emailed him. It costs a few bucks ($39) but well worth it IMHO. I spent a few weeks going through that book, did a few apps on my own, and then was able to create new apps fairly quickly.
The official Rails Guides are a great resource too and kept up to date too [2].
Configuring your local rails development environment is pretty easy with the thoughtbot laptop script [3], otherwise it can be kind of a pain to do it from scratch.
[1] https://www.learnenough.com/ruby-on-rails-6th-edition-tutorial
[2] https://guides.rubyonrails.org/
[3] https://thoughtbot.com/blog/laptop-setup-for-an-awesome-development-en…
awb · 2021-10-01
> I don't follow this at all.
I didn't either.
This same user states multiple times that "Everyone knows what a protected class means" and to use "common sense". After being pressed to define it then suggests: "The dictionaries should have a more understandable definition." but then offers no link to "The dictionaries".
This user has 4 followers on GitHub, but is lecturing the Ruby community on "obvious" things that unfortunately aren't that obvious.
I'm all for a robust discussion to make the community a better place, but assuming everyone has your world-view and a common understanding of words that you yourself struggle to define is a quick way to alienate folks who are seriously trying to understand the arguments but need more information.
Other people chime in to recommend that people "educate themselves", and links to an article (https://thoughtbot.com/blog/beyond-best-intentions) which suggests protected classes are: "Black, Indigenous, and People of Color, queer folks, and disabled people" because they "are disproportionately likely to experience bias and discrimination at work and in social circles."
Another user suggests the California definition which is much broader (https://www.senate.ca.gov/content/protected-classes) and includes classes like "marital status" and "genetic characteristics".
It's just better to be clear about what exactly is meant by these terms if possible.
pritambarhate · 2020-06-02
>> I am building an application that has 2 million rows of data.
It will also be helpful to know what kind of hardware you are using for the database. How much RAM the machine has? Does the whole dataset fit in the RAM? If not, at least indexes should fit in the RAM.
Disk type: HDD/SSD?
Are you using indexes?
Did you check "explain analyze"[1] to check your query plans to ensure that the indexes are being used or not?
There are many things that affect database performance.
>> I want to build something that involves billions of rows of data. I want to know how to speed it up.
The key to this is "Shared nothing architecture" along with a Sharded Database. I have tried to explain this architecture here [2]. To understand Database sharding, I would recommend this Digital Ocean Article [3].
To learn more about highly scalable architectures I would suggest reading the real world architectures section [4] of the High Scalability Blog.
[1] https://thoughtbot.com/blog/reading-an-explain-analyze-query-plan
[2] https://mobisoftinfotech.com/resources/mguide/shared-nothing-architect…
[3] https://www.digitalocean.com/community/tutorials/understanding-databas…
[4] http://highscalability.com/blog/category/example
kadenshep · 2018-04-11
To anyone reading, bitkeeper does nothing special in this regard. Enforce commit message standards, plenty of platforms and systems built around git (and literally every other SCM) have support for this.
Here's what he's taking about: http://www.bitkeeper.org/man/citool.html and http://www.bitkeeper.org/man/templates.html
Here is git's analogous feature: https://robots.thoughtbot.com/better-commit-messages-with-a-gitmessage…
It's possibly the least interesting and least unique selling point an SCM can have. It's really funny that you keep bringing up this example around the thread.
EDIT: To respond to the above edit:
Again, he's Proving The Point. Commits should be atomic. If you have to individually comment on file changes then the correct thing to do would be to put those in their own commit, no? I'm not really sure what's being described is necessarily a cool feature, but rather a way to avoid making sure your changes are truly related. I honestly don't see the point. This seems like a feature that was written because of the decisions that were made into how BitKeeper works internally, not because it's a fantastic idea. You can get the same thing with atomic commits in git. You comment per file, because BK tracks changes per file. Git does not do this. You should be making your commits atomic because git is tracking the actual content. Atomic commits will accurately describe what's being changed, and then of course those all get lumped together in a…
duykhoa12t · 2017-07-25
I read from https://robots.thoughtbot.com/.
Croaky · 2017-03-01
thoughtbot | Web Developer | Austin, Boston, New York City, Raleigh, San Francisco | https://thoughtbot.com/jobs
thoughtbot | Designer | Boston, New York City, Raleigh | https://thoughtbot.com/jobs
thoughtbot | Design Director | London | https://thoughtbot.com/jobs
thoughtbot designers and developers rapidly build high-quality web applications. Well-qualified designers and developers have excellent knowledge of HTML, CSS, JavaScript. Designers should also be able to create great visual designs and run usability tests and product design sprints.
Developers should have excellent knowledge of Ruby on Rails, , SQL, Unix, and Test-Driven Development. We also have active projects in Go, Elixir Phoenix, React, and React Native. Experience or interest in these technologies is a plus.
Very well-qualified candidates will also have experience with consulting. We work a sustainable pace of 40 hours/week, consulting for clients four days/week. On Fridays, we have investment time when we learn new tools and techniques, work on open source, write blog posts, and make ourselves, each other, and the community better.
https://robots.thoughtbot.com/investment-time
hackercomplex · 2016-02-11
I have a theory about this stuff. Some programmers who need to "blow off" a day here or there spend it by lounging around on the sofa playing video games. I don't mean to rag on gamers because I'm one myself, but the point is I'm fascinated by the fact that many video games are also "mental challenges" that are similar in several ways to computer programming and use similar parts of the brain. What factor(s) then make the game-play enjoyable while the heavy-lifting dev-work feels sometimes more tedious ? Maybe there is a way to adjust our methodology to feel more game-like, relaxing, and fun.
I think I've actually stumbled upon a way to do this, allow me to explain: If you start to read about the statistics around social dynamics in MMORPG games then certain things fall out of the data, and game makers have picked up on these ideas and used them to make their games more fun and addictive, and I think these same insights can be applied to organize software development.
Lets start with World of Warcarft. The statistics prove that World of Warcraft is a highly addictive game for many diverse people, but almost everyone agrees that if you were to join an empty server you would find that it's not an addictive game in one player mode. If you take this a bit further and say.. "ok, now you're on a server with other people, but you're not allowed to join a group, but you are allowed to conference with several players, exchange weapons and loot, and message individual…