Pecas: Machine Learning Problem Shaping and Algorithm Selection

In our previous article, Machine Learning Aided Time Tracking Review: A Business Case we introduced the business case behind Pecas, an internal tool designed to help us analyse and classify time tracking entries as valid or invalid.

This series will walk through the process of shaping the original problem as a machine learning problem and building the Pecas machine learning model and the Slackbot that makes its connection with Slack.

In this first article, we’ll talk through shaping the problem as a machine learning problem and gathering the data available to analyse and process.

Read more »

Machine Learning Aided Time Tracking Review: A Business Case

As an agency, our business model revolves around time. Our client activities rely on a dedicated number of hours per week worked on a project, and our internal activities follow the same pattern. As such, time tracking is a vital part of our work. Ensuring time is tracked correctly, and time entries meet a minimum quality standard, allows us to be more data-driven in our decisions, provide detailed invoices to our clients and better manage our own projects and initiatives.

Despite being a core activity, we had been having several issues with it not being completed or not being completed properly. A report we ran at the end of 2022 showed our time tracking issues were actually quite severe. We lost approximately one million dollars in 2022 due to time tracking issues that led to decisions made on poor data. It was imperative that we solved the problem.

To help with this issue, we created an evolution of our Pecas project. We turned Pecas into a machine learning powered application capable of alerting users of issues in their time entries. In this article, we’ll talk though the business case behind it and expected benefits to our company.

Read more »

Hacktoberfest 2023: How We Merged Open Source Contributions with Learning Objectives

As a company, one of our core values is to be “open by default.” At the same time, one of our goals is to use our open source investment time as a way to improve our skills as engineers and designers.

In that spirit, this year we decided to organize our open source contribution time in a way that wasn’t limited to our own open source projects. This is a short post to explain how we aligned our open source contributions with our learning goals, what contributions we made, and why it mattered.

Read more »

Running Airflow on Google Kubernetes Engine without Helm

Google Cloud Platform (GCP) can be a very good option for Airflow and, although it offers its own managed deployment of Airflow, Cloud Composer, managing our own deployment gives us more granular control over the underlying infrastructure, impacting choices such as what Python version to run and even when to upgrade Airflow itself.

The Airflow community maintains a Helm chart for Airflow deployment on a Kubernetes cluster. The Helm chart comes with a lot of resources, as it contains a full Airflow deployment with all the capabilities. We didn’t need all of that, and we wanted granular control over the infrastructure. Therefore, we chose not to use Helm, although it provides a very good starting point for the configuration.

Read more »

Introducing the Account Advocate - A Dedicated Partner for Success

As a company, we are committed to ensuring our client’s success and believe that maintaining strong relationships with the people who trust us with their projects is a driving force of success. One of our core values is, in fact, Continuous Improvement, and we make an effort to live it every day.

In that spirit, we are excited to announce a new role in our organization, the Account Advocate, a key role in our team fully dedicated to championing client interests, collaboration and ensuring successful partnerships that go above and beyond.

Read more »

Design Sprint Day 5: Test

This is part of our series on design sprints. If you haven’t read our previous articles, I encourage you to read more about our design sprint process.

Day 5 of the design sprint is about testing your prototype and getting feedback on your ideas. That way, you can quickly learn what is or isn’t working about the concept. Yesterday, the interviewer spent time putting together a list of questions for the interview sessions. Earlier this week, your team recruited 5 participants for Friday’s research. Now you are ready to do the dang thing.

Read more »

Handling Environment Variables in Ruby

Configuring your Rails application can be tricky. How do you define secrets? How do you set different values for your local development and for production? How can you make it more maintainable and easy to use?

Using environment variables to store information in the environment itself is one of the most used techniques to address some of these issues. However, if not done properly, the developer experience can deteriorate over time, making it difficult to onboard new team members. Security vulnerabilities can even be introduced if secrets are not handled with care.

In this article, we’ll talk about a few tools that we like to use at OmbuLabs and ideas to help you manage your environment variables efficiently.

Read more »

Quickstart: Preparing Your Organization To Work with an Agency

You’ve signed a contract with an agency, awesome! At this point you already know that agencies like ours offer expertise and resources that can help you overcome challenges, increase efficiency, and achieve your goals.

Now that the executives, sales team, and lawyers have signed off on the project, how do you get off to a quick start to accomplish your business goals?

Read more »

Design Sprint Day 4: Prototype

This is part of our series on design sprints. If you haven’t read our previous articles, I encourage you to read more about our design sprint process.

Day 4 is a little different from the other days of the Design Sprint. Instead of a series of workshops, we will spend most of the day each working on one part of the prototype.

Towards the end of the day, we will do a test run to check on our progress and adjust from there.

Read more »

A Quick Intro to Graphs

In my previous post, I mentioned how I was having issues with populating my random maze. The main problem is that there isn’t a clear way to programmatically add random rooms and paths between those rooms. I ended up with a method way more complex than I wanted and that only did the most basic thing, which was to add random types of rooms and just connect them randomly as well, but without verifying any form of room placement, for example.

This is a clear sign that we need another layer of abstraction. We need something that can hold our maze data and to take care of placing the rooms and connecting them according to the rules we establish. After some research, I think I found the right alternative: the Graph.

Read more »

Why you should speak at conferences

Speaking at conferences can be a daunting task, and I am not here to deny that. But beyond that daunting task lies a bunch of benefits. Through this post, I am trying to shed light on some of those benefits and how you can make the task of speaking at a conference a little less daunting. Please continue reading if this interests you.

Read more »

How to Create a Positive and Productive Remote Work Culture

At OmbuLabs, we love remote work. While other companies are asking employees to come back into the office, we are continuing to lean into the remote-first work culture that we had even before the pandemic. In this article, I will discuss the reasons why remote work is essential to the culture of our company. I will then outline how we create a culture that is both remote-friendly and productive.

Read more »

Design Sprint Day 3: Decide

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 will assess which parts of our designs are most successful and create a storyboard to show the steps that our target customer might take towards achieving the goal.

Remember your sketches from Day 2? It’s time for the team to see them. The purpose of this activity is for the entire team to see each other’s work and get to pick out all the best pieces for our next activity.

Read more »