Be it for our own internal tooling or on our client’s projects, we’ve used a variety of package managers. When building our newest tool, we...
Uv
Python
Heroku
In 2023, Ciera Jaspan and Collin Green, as part of the Engineering Productivity Research Team at Google, published a paper titled Defining, Measuring, and...
opens a new window
Tech Debt
Technical Debt
Maturity Model
As a company, one of our core values
opens a new window
is to be “open by default.” At the same time, one of our goals is to...
Open Source
Hacktoberfest
Learning
This is part of our series on design sprints
opens a new window
. If you haven’t read our previous articles, I encourage you to read more about our...
User Experience
Product
UX
UX Research
You’ve signed a contract with an agency, awesome! At this point you already know that agencies like ours
opens a new window
offer expertise and resources that can...
Project Management
Best Practices
Tips
This is part of our series on design sprints
opens a new window
. If you haven’t read our previous articles, I encourage you to read more about our...
User Experience
Product Design
Design Sprint
In my previous post
opens a new window
, I mentioned how I was having issues with populating my random maze. The main problem is that there isn’t...
Data Structures
Graphs
Maze
Design Sprints
opens a new window
lend themselves nicely to a virtual format, and digital tools can enhance this widely-used process developed by Google Ventures
opens a new window
.
…
UX
UX Research
Product Design
Design Sprints
Day 3 is all about picking a direction and going forward with it. Over the course of the third day of the Design Sprint, we...
Product Design
UX
UX Research
Design Sprint
So, our little exercise in design patterns
opens a new window
is getting quite messy. Which is ironic, considering it’s an exercise in design patterns.
The reason...
Ruby
Design Patterns
Unit Testing
As a consultancy specializing in upgrades, dealing with legacy code is our bread and butter. Incompatible versions of Ruby, different version managers, C errors while...
Devops
Docker
Virtualization
Have you ever wondered what the values on the request queue graph in the APM tool meant or whether a certain value indicated good or...
Performance
Monitoring
Request Queue
If I were to ask you: tell me in one word or a number here, how satisfied are your users with the response times of...
Performance Monitoring
Performance
Apdex Score
Upon integrating any performance monitoring tool for your application, you must be observing p95, p99 response times on the dashboards. If you are wondering what...
Performance
Response Times
P95
P99
P50
Web Sockets are an integral part of a lot of modern-day systems. But have you ever wondered how a Web Socket actually works? Or does...
Systemdesign
Websocket
Rails
Frontend development is so exciting nowadays! There is a wide spectrum of opportunities in each particular project. There can be tons of different interesting cases...
Software Development
Open Source
Testing
In the last part
opens a new window
of this series, we left our little maze game gem generating random mazes that had random kinds of rooms using...
Ruby
Design Patterns
Best Practices
Since 2016, the company has invested in native-to-mobile civic experiences to encourage political engagement among its users—whether it’s by learning what’s on your ballot, or...
Case Study
Snap Minis
Product Development
Have you ever wondered how does Medium recommend blogs to read or how does a platform with millions of users tells if a username is...
Systemdesign
Ruby
Bloom Filter
No, not that Meta
What most developers call JavaScript frameworks (React, Vue, Svelte, etc) can more accurately be thought of as UI Libraries. While they...
Javascript
Meta Framework
Framework
In my last article
opens a new window
I introduced this series and here’s the first pattern: the Abstract Factory
Design Patterns
Abstract Factory
Ruby
Be it for our own internal tooling or on our client’s projects, we’ve used a variety of package managers. When building our newest tool, we...
Uv
Python
Heroku
In 2023, Ciera Jaspan and Collin Green, as part of the Engineering Productivity Research Team at Google, published a paper titled Defining, Measuring, and...
opens a new window
Tech Debt
Technical Debt
Maturity Model
As a company, one of our core values
opens a new window
is to be “open by default.” At the same time, one of our goals is to...
Open Source
Hacktoberfest
Learning
This is part of our series on design sprints
opens a new window
. If you haven’t read our previous articles, I encourage you to read more about our...
User Experience
Product
UX
UX Research
You’ve signed a contract with an agency, awesome! At this point you already know that agencies like ours
opens a new window
offer expertise and resources that can...
Project Management
Best Practices
Tips
This is part of our series on design sprints
opens a new window
. If you haven’t read our previous articles, I encourage you to read more about our...
User Experience
Product Design
Design Sprint
In my previous post
opens a new window
, I mentioned how I was having issues with populating my random maze. The main problem is that there isn’t...
Data Structures
Graphs
Maze
Design Sprints
opens a new window
lend themselves nicely to a virtual format, and digital tools can enhance this widely-used process developed by Google Ventures
opens a new window
.
…
UX
UX Research
Product Design
Design Sprints
Day 3 is all about picking a direction and going forward with it. Over the course of the third day of the Design Sprint, we...
Product Design
UX
UX Research
Design Sprint
So, our little exercise in design patterns
opens a new window
is getting quite messy. Which is ironic, considering it’s an exercise in design patterns.
The reason...
Ruby
Design Patterns
Unit Testing
As a consultancy specializing in upgrades, dealing with legacy code is our bread and butter. Incompatible versions of Ruby, different version managers, C errors while...
Devops
Docker
Virtualization
Have you ever wondered what the values on the request queue graph in the APM tool meant or whether a certain value indicated good or...
Performance
Monitoring
Request Queue
If I were to ask you: tell me in one word or a number here, how satisfied are your users with the response times of...
Performance Monitoring
Performance
Apdex Score
Upon integrating any performance monitoring tool for your application, you must be observing p95, p99 response times on the dashboards. If you are wondering what...
Performance
Response Times
P95
P99
P50
Web Sockets are an integral part of a lot of modern-day systems. But have you ever wondered how a Web Socket actually works? Or does...
Systemdesign
Websocket
Rails
Frontend development is so exciting nowadays! There is a wide spectrum of opportunities in each particular project. There can be tons of different interesting cases...
Software Development
Open Source
Testing
In the last part
opens a new window
of this series, we left our little maze game gem generating random mazes that had random kinds of rooms using...
Ruby
Design Patterns
Best Practices
Since 2016, the company has invested in native-to-mobile civic experiences to encourage political engagement among its users—whether it’s by learning what’s on your ballot, or...
Case Study
Snap Minis
Product Development
Have you ever wondered how does Medium recommend blogs to read or how does a platform with millions of users tells if a username is...
Systemdesign
Ruby
Bloom Filter
No, not that Meta
What most developers call JavaScript frameworks (React, Vue, Svelte, etc) can more accurately be thought of as UI Libraries. While they...
Javascript
Meta Framework
Framework
In my last article
opens a new window
I introduced this series and here’s the first pattern: the Abstract Factory
Design Patterns
Abstract Factory
Ruby
Hello everyone, this is my first blog post on the ombulabs.com
opens a new window
blog. I am so excited to have joined the company and to have...
Software Development
Open Source
Community
The second day of the Design Sprint is about finding inspiration, looking back at the decisions made during Day 1, and starting to assemble possible...
UX
UX Research
Product Design
Design Sprint
Have you found yourself in the fortunate position of being the only designer in an organization that doesn’t have any design assets or previous research?...
UX
UX Research
Product Design
Let’s deep-dive into what happens on the first day of a Design Sprint. On Mondays, we understand the problem.
I want to give credit to...
UX
UX Research
Product Design
Design Sprint
At OmbuLabs, we have some projects where multiple teams work at the same time on different features or fixes. We started using Heroku’s Review...
opens a new window
Heroku
Github
Review Apps
Do you know what the most successful apps and digital products have in common? An idea. An idea that was challenged, tested, recalibrated, and validated...
Product Design
Design Sprint
Products
“You can have a little imperative React, as a treat.”
When building modern applications with React, Function Components and Hooks are the de facto way...
React
Javascript
forwardRef
It’s been a few months now that we’ve been toying with Elixir here at OmbuLabs. Particularly with Phoenix. However, I like to toy a bit...
Elixir
Testing
Unit Testing
The title says it all, but how does one actually implement object oriented design patterns in Ruby? If you’re like me and always struggled with...
Design Patterns
Ruby
Learning
To the seasoned developer this may seem like a silly question, but to developers who are self-taught, bootcamp trained, or even just have never come...
Javascript
Typescript
Programming
Open source powers many of the tools that we rely on daily for our work. As developers, we have the privilege of being able to...
Learning
Open Source
Tips
Today we will discuss the I in SOLID which, you may or may not know, represents the Interface Segregation Principle (ISP). This is the fourth...
Learning
Software Development
Best Practices
This post is the third one in the SOLID principles series. The first post
opens a new window
discussed the single responsibility principle and in the second...
opens a new window
Learning
Software Development
Best Practices
In a previous post
opens a new window
we considered the practical value of the Single Responsibility Principle (SRP). This is the second post in this series where...
Learning
Software Development
Best Practices
“If you can’t measure it, it doesn’t exist” - Peter Drucker
Tackling technical debt can be a thankless task. You can spend hours...
Maintenance
Software Maintenance
Technical Debt
We agree with Sandi Metz
opens a new window
when she describes Object Oriented (OO) design as a style guide for arranging code
opens a new window
. The so called “OO...
Learning
Software Development
Best Practices
The impact of technical debt is obvious to developers. Devs are the ones that have to tackle the headaches of dependency issues and patch holes...
Maintenance
Technical Debt
Software Maintenance
Business Case
In keeping with the first part of this series
opens a new window
, I’ll list a few interesting issues we found when making the apps work as similar...
Learning
Crossbrowser
Snap Minis
Javascript
Over the last few months, we developed a couple of Snap Minis
opens a new window
. Minis are small static web apps that are run inside a webview...
Learning
Snap Minis
Javascript
At OmbuLabs our goal is always to smooth processes, and make work easier. Isn’t that what software engineering is really all about in the first...
Open Source
Agile
Points
Open Source is one of the things that we value
opens a new window
as a company. Our philosophy is that “everything we do should be open by...
Open Source
Best Practices
Oss
Last month, Snap
opens a new window
announced a new product during the Snap Partner Summit 2020
opens a new window
, Snap Minis
opens a new window
. Minis are bite-sized third-party experiences that live...
Software Development
Snap Minis
vue.js
Since starting at OmbuLabs as the Junior Developer I have had the incredible opportunity to pair with my teammates. A lot. Over the months we...
Learning
Pair Programming
Tips
One of the most fundamental tasks when writing or refactoring software of any kind is breaking the problem down into smaller parts. When you’re first...
Learning
Software Development
Coupling
Cohesion
Design Principles
Becoming the Apprentice, and then Junior Developer at OmbuLabs was both exciting and nerve racking. Learning a new company can be challenging, especially when the...
Learning
Remote
Tips
This is our first quarter report for open source projects, we will be releasing this report on each quarter of the year with the purpose...
Open Source
Report
Skunk
Bundler Leak
rubymem.com
Tough Love
One of the first things that a journeyperson programmer will have to learn when they transition from full time student to working...
Learning
Software Development
Career
At OmbuLabs we are firm believers of open source. We use open source but also like to contribute back to the community and we have...
Open Source
Best Practices
Tips
A few months ago I received the task of making the FastRuby.io
opens a new window
sitemap refresh automatically after each deploy. That sounds like it would be...
Seo
Sitemap
Ruby
The last time
opens a new window
we looked at Docker, we looked at the most basic and easy version of using it - building an image from...
Devops
Docker
Tutorials
No app is flawless. We all know that. Quality Assurance is an important part of any software development process and the better the tester, the...
Software Development
Software Quality
Testing
Manual testing is a necessary part of software development and quality assurance. And although it’s important to have a dedicated tester in your team, you...
Software Development
Software Quality
Testing
We launched FastRuby.io
opens a new window
, our first productized service, back in June 2017. At the time, we had been doing Ruby on Rails
opens a new window
upgrades since...
Fastuby
Design
Ui
UX
In my last article
opens a new window
, I gave a brief tour of what Docker is, and basic usage. Once you’ve got your feet under you with...
Devops
Docker
Tutorials
I will not bore you by telling you the history of Vim
opens a new window
, and the differences between vi and Vim and all of its philosophy…
…
Learning
Vim
Text Editor
If you’re like I was not too long ago, the DevOps world gives you a chance to experience what most non-developers probably feel like when...
Devops
Docker
Tutorials
Recently at OmbuLabs
opens a new window
I had the mission of setting up Heroku Review Apps
opens a new window
for one of our projects. Since the project is built...
Heroku
Review Apps
Multi Tenant
Contributing to open source might be scary, you might think that your pull request (PR) is not good enough; that people will judge you by...
Open Source
Contribute
Best Practices
Pull Requests let developers tell other team members about changes they’ve made to a project repository. Once a pull request is created, team members can...
Agile
Learning
Pull Requests
In a recent project for OmbuLabs
opens a new window
, we were looking for a payment solution that allows users of our platform to easily start accepting online...
Rails
Stripe
Stripe Connect
In this series of code refactoring
opens a new window
posts we are discussing how design patterns can be used to make our Ruby
opens a new window
code beautiful, maintainable...
Code Refactor
Design Patterns
State Pattern
If you’ve been a web developer for any length of time at all these days, you’ve no doubt used at least a few web based...
Best Practices
Apis
Api Design
In our last article of the refactoring series
opens a new window
we saw how design patterns can be used to make our Ruby code beautiful and clean....
Code Refactor
Design Patterns
Template Pattern
Ruby
Refactoring
Code refactoring can be defined as “the process of introducing small and incremental changes to leave the code in a better state than it was.”....
Code Refactor
Design Patterns
Ruby
Refactoring
Last month was the fifth edition of the Rails Girls Buenos Aires
opens a new window
event, and the third time OmbuLabs participated as a sponsor and part...
Learning
Rails
Rails Girls
After reading introductory primers and watching instructional videos for beginners learning Ruby
opens a new window
, I needed a program that would allow me to test out Ruby...
Ruby
Learning
Ruby Koans
Monit
opens a new window
is a powerful tool for monitoring processes on Unix
opens a new window
systems and sometimes it can be very useful to receive notifications about a...
Monit
Slack
Linux
A few weeks ago I had the opportunity to talk to Preston St. Pierre
opens a new window
, CTO of Predictable Revenue
opens a new window
. We worked with Preston and...
Case Study
Software Development
Scaling
Today we are happy to announce the launch of our first productized service: FastRuby.io
opens a new window
- Speedy Ruby on Rails Upgrades by OmbuLabs.
We are...
Rails
Upgrades
fastruby.io
When you create IAM
opens a new window
credentials and policies for your app, you should make sure that they have access to the resources that they need...
Aws
Carrierwave
S3
One of the hardest failing tests to debug are those which fail randomly, also known as “flaky” tests. You write your test cases, you run...
Rspec
Continuous Integration
Testing
We all know the importance of having a CI
opens a new window
tool integrated in your project. It allows you to run your entire test suite every...
Continuous Integration
Circle Ci
Rails
I have been using the capybara-webkit
opens a new window
gem for a while now since I first tried it out after making the switch from Capybara +...
Rails
React
Capybara
Testing
Getting started with a new project should be as simple as possible, even for someone who is not technical. As a maintainer, you must make...
Maintenance
Conventions
Project
There are a few agile practices
opens a new window
that I really love. Pair programming
opens a new window
is one of them.
We try to do it as much...
Agile
Pair Programming
Best Practices
A few weeks ago, I found an interesting project called Bumbler
opens a new window
. If your project uses Bundler, Bumbler shows you your project’s largest dependencies. When...
Ruby
Performance
Bumbler
Hubot
opens a new window
makes it incredibly easy to setup on a Heroku server, by taking advantage of its Procfile support. Simply running git push...
Hubot
Linux
Heroku
If you are working with open source or if you are going to open source a repository, you should ensure that none of your sensitive...
Open Source
Security
Git
The simplest way to contribute to an open source project is to file an issue. Here are a few steps for you to file issues...
Open Source
Bugs
Github Issues
As a maintainer of a few Ruby gems, I have to decide what is accepted and what gets rejected into the gems. The other day...
Docker
Rubygems
Open Source
The other day I was trying to interact with a hidden file input field:
<div class="col-sm-3">...
Protractor
Testing
E2e
We have been using Slack at OmbuLabs
opens a new window
for a while now after switching from HipChat, and haven’t looked back. It looks and feels much...
Ruby
Slack
Slack Notify
On April 17th we discovered a security vulnerability in the Mercado Pago API
opens a new window
. Before disclosing this information, we contacted Mercado Libre
opens a new window
and sent...
Security
Vulnerability
Mercado Pago
Quality should be present in everything you do, but it should be balanced with the time you spend working on a feature. Does it feel...
Software Development
Software Quality
Best Practices
The other day my friend Juan Rossi
opens a new window
reported a vulnerability in the Almundo
opens a new window
billing system. Since then, the vulnerability has been fixed by...
Security
Vulnerability
Privacy
If you are using git in 2015, you are probably also using Github
opens a new window
, unless you’re self-hosting or still betting on Bitbucket
opens a new window
.
Below are...
Git
Github
Tricks