Connecting thoughts
Articles written by SINAPTIA about software development in general and Ruby on Rails and React in particular.
This week in #devs
Welcome to the first edition of “This week in #devs”, a series of posts where we share articles, thoughts, and conversations that happen in our #devs channel on Slack.
Debugging a memory-leaking action
This week we had to refactor a feature in one of the Ruby on Rails apps we’re maintaining. While at it, we discovered it was leaking memory, making the memory usage ramp up exponentially. With our expertise and the help of some tools, we were able to identify the root cause and fix the issue. Read on to learn more about how we approached this problem.
Rediscovering fixtures
Over the last couple of months, I’ve been investing a lot of time in improving my testing skills. I spent most of this time in going back to the basics, trying to start from scratch with every little concept one takes for granted. Trying to see everything through a child’s eyes. And today I’m rediscovering fixtures.
Guidelines for writing better specs
In our last couple of posts, we’ve been reviewing common problems with long-living RSpec test suites and contrasting them against Minitest and the four-phase testing strategy. There are situations where migrating to Minitest is safer and possible, but what can we do if we are still using RSpec and changing it is not an option?
Make minitest/unit Great Again
This sentence is wrong but funny. Minitest has always been great. In our last post, a situation made me think if I should be critical about how I test (and testing in general) and if I should do something about it. This is what happened next.
Don't over-engineer your tests
I’ve used RSpec for years, and until recently I had to work with a colleague that never really tested before. This process made me think if I should be critical about how I test and if I should (or shouldn’t) do something about it.
Optimizing background jobs execution with Delayed::UniqueJob
Delayed Job doesn’t have a mechanism for defining unique jobs. Enqueing a time-consuming or resource-intensive job multiple times could be harmful if not treated accordingly. Introducing Delayed::UniqueJob, a Ruby gem for defining unique jobs in Delayed Job.
A remote require for Ruby
I have been fascinated by Deno’s remote import since I discovered it. Experiment with me on how to make a remote require for Ruby based on Deno’s remote import.
A discussion around Integer division in Ruby
We will explore Ruby’s division behavior and analyze several alternatives to obtain a true division.
Lesson learned: sharing context with Flutter dialogs
In Flutter, dialogs don’t automatically share the context with the parent widget. We found out while implementing providers. Learn how to solve the problem.
Reimplementing a broken search engine
We’ve been working with a boat marketplace for a year now. One of the most interesting challenges we faced during this time was reimplementing their broken search engine. This is how we did it.
What is a Skeleton Screen? A real-life Flutter example
Even though our primary focus is Ruby on Rails, we’re developing one Flutter application. In this project, we implemented a Skeleton Screen to enhance the app’s professional appearance during data loading. What is a Skeleton Screen and how did we implement one?
Why Ruby on Rails is still great for MVPs
Ruby on Rails remains a great framework for developing web applications. Thanks to its maturity and philosophy, one can build MVPs in a fast, efficient, and scalable way. Discover why Rails continues to be a great and influential framework to this day.
Long-awaited comparison validator comes to Rails 7
For years we had to manually compare values in our validations. Rails 7 added the comparison validator to ActiveModel. Read on and discover, as we just did, how it works.
Is Ruby on Rails secure?
This is one of the most frequently asked questions from people who want to build an MVP with Ruby on Rails.
I want to finish it quickly
Anxiety and lack of experience make junior developers want to finish their tasks quickly to prove that they can handle them.
Function Currying: A real-life use example
Moving your functions from a component to a separate file can improve readability and organization, but what happens when the data you need is outside the scope? In this article I will show you how I solved this problem with function currying.
la_plata.rb September meetup
On 14th September, another la_plata.rb meetup occurred. We had some fun and learned some new things. Here’s a recap.
Talking to hostile APIs
APIs allow us to communicate with third-party software in order to use their services and data. In today’s software, it’s almost impossible not needing to use one, one way or another. What if they are hostile?
Introducing Audited-UI
We’ve been using the audited gem for a couple of projects, but the lack of a built-in view to display the changes challenged us to write our engine. We are happy to introduce audited-ui.
Consequences of parrot-like APIs
Psittacism signifies repetitive speech in the manner of a parrot. Can APIs suffer from it and what are their consequences?
Quality Assurance, the SINAPTIA way
Quality Assurance takes a key role in software development. In this post, we’ll share our Quality Assurance process that allows us to deliver quality software.
Using strong_params beyond mass assignments
Strong Parameters are typically used in Ruby on Rails for mass assignments, but in this article, we explore an additional use for this feature.
Don't do this at home
Service objects is a Ruby on Rails pattern widely used. In this post, I’ll show you one example I stumbled upon recently. What’s wrong with it and how did we fix it?
Quality Assurance automation on a serverless architecture
Nowadays, technology is evolving at an unprecedented rate, presenting us with new challenges and opportunities. One challenge is adapting to new architectures, and in this post, we will explore how we did QA Automation on a serverless architecture.
Nativifying a docker development environment
I’ve been working on docker exclusively since 2018. Besides its many benefits, it could be tiresome to type longer commands every single time. How do I do it without losing my mind?
React by example: Slider Panel
Slider panels are widely used nowadays. In this post, we’ll build a fully functional custom React slider panel with Tailwind. Ideal for overlay menus, navigation, content lists, or even forms or configuration panels!
Don't build lasting relationships with your components
Overcomplicated props, ingrowing learning curves, and eventual technical debts are symptoms that appear as new requirements emerge on a project. Design Systems evolve outgrowing our components, leading toward their end. How can we ensure that our components thrive against the design challenges we encounter daily?
Bringing a 10-year-old Ruby on Rails app back to life
Last week we published the case study of one of our first projects. After 10 years in the archive, I found and brought this old Ruby on Rails 4.0 application back to life.
The role of design in MVPs
Finding a good balance between design and development is one key aspect to take into account while developing an MVP. Visually appealing products might have a bigger impact on the market than one built from a template, even if it has the same or even more features. But, is it the right choice for your project?
Hybrid and Dynamic Database Multitenancy with Ruby on Rails
What is Hybrid and Dynamic Database Multitenancy and how to successfully achieve it with Ruby on Rails (> 6.0) and PostgreSQL? Our experience implementing a hybrid and dynamic database multitenancy system for one of the projects we’re involved in.
Dynamic horizontal slider using React and custom hooks
A custom horizontal slider using React hooks to have full control over the design and behavior of the component. No more limitations!
Debunking myths about Ruby
There’s a lot of criticism of Ruby and Ruby on Rails. In this post, we will try and debunk four widespread myths about Ruby.
The five strings paradox
There are five interdependent forces in every software project that can drive it to success or to utter failure. Read on if you want to learn about how they work and how to wield them.
Why Ruby on Rails?
Ruby on Rails is our main tool for building MVPs and big web applications. There’s a wide array of myths about it online: that it’s old, or dead, or slow, that it’s not relevant anymore. We revisit our tech choice every year and we still chose Ruby on Rails. Here’s why.
Beware of this status update
In our previous two posts, we discussed why communication matters and what’s the best status update. In this post, we will analyze a very common pattern of communication and how we can prevent it from becoming a problem.
The best status update
Status updates are often regarded as monotonous, repetitive, and useless. But for us, they’re the most powerful and simple tool we have to deactivate all sorts of communicative issues the main way to build successful and enjoyable relationships with our clients.
Communication matters
Communication is a key aspect of our culture and development process. Do you want to know why and how?
Your old Ruby on Rails application sucks
Do you have a Ruby or Rails application in production for more than 4 or 5 years? Has the test suite crumbled to pieces because of too many broken or flaky tests that no one has time to fix? Do you feel your app needs a lot of love that no budget will ever be able to sustain? Read on to know what we do in these cases.
Taking over a project, the SINAPTIA way
Sometimes we are hired to take over a project with different goals in sight: general maintenance, adding new features, or overhauling them completely. In this post, we’ll share our methodology for taking them over, what we do to gain the feel of owning the project, and how we start delivering fast.
Upgrading Ruby on Rails applications
When maintaining Ruby on Rails applications, it’s always recommended to run the latest versions of the framework so it receives security patches and performance boosts from newer versions. In this post, we’ll see our way of upgrading Ruby on Rails applications.
Working remotely effectively
We are a fully remote company, and as such we understand the downsides of working remotely. How do we effectively do it?
Building an MVP with SINAPTIA
What to expect before, during, and after building an MVP with us. Deep dive into the process: from the discovery phase to launch!
What is an MVP?
Let’s imagine you’ve found an idea for a novel product, or you found a need in the market that is poorly fulfilled or not fulfilled at all. How can you be sure? Will your idea be successful? Will enough people like it and use it for it to thrive? A small guide for someone who wants to build a product.
Mounting react components
Our approach to building modern React frontends within a Ruby on Rails monolith makes use of the best of both worlds.
A case against form objects
Based on Ruby on Rails examples, the core idea should apply to other languages and frameworks.
Docker in development: Episode 4
Continuing our Docker in development series, in this episode we will see alternatives so we can optimize our images.
Docker in development: Episode 3
Continuing our Docker in development series, in this episode we’ll be exploring how to perform everyday tasks in our containers.
Docker in development: Episode 2
Continuing our Docker in development series, in this episode we’ll dockerize a Ruby on Rails application.
Docker in development: Episode 1
In this series, we will explore the motivation and benefits of using docker in development. We are going to give everyday tips that helped us move forward using it, focused on Ruby on Rails and React development.