Experience

Freelancing

I’ve been a freelance software engineer for several years (since 2013), both part-time (while working a full-time job) and full-time. This experience helped me develop skills that I highly value until this day:

  1. Working independently
  2. Time management
  3. Focusing on deliverables over 9-to-5 presence
  4. Competitive mindset (although it can also be stressful)
  5. Using English as my day-to-day language
  6. Flexibility when it comes to working on the task at hand, the technologies to use, the development processes, etc.
  7. Exposure to multiple engineering teams, backgrounds, work cultures, etc.

Almost all of my clients came through Toptal, and you can find more details about my journey in my Toptal profile.

Pipedream

Website
Software Engineer ( Aug 2022 - Present )
  • Area: Engineering
  • Team: Adoption/Acquisition
  • Show details...

    My journey at Pipedream began as a part-time contributor to their main open-source project. Impressed by the compelling product and our effective collaboration, I transitioned to a full-time role.

    Working in a startup environment, the nature of my role is remarkably varied. My team, with a focus on adoption/acquisition, tackles diverse tasks. I revamped our OAuth accounts management logic to streamline the authentication flow, ensuring users select the right scopes during account setup. Additionally, I created a versatile library for in-app surveys to gather user feedback effectively.

    In bug-fixing endeavors, I’ve addressed critical issues impacting new customers, although specific instances might not be recalled. Notably, the implementation of the RBAC feature stands out among the most requested features, demonstrating a commitment to user satisfaction and engagement.

    Cleaning up and refactoring crucial elements of our backend, specifically in our Ruby on Rails back-end, was essential. Streamlining context determination for user and workspace in requests, especially important for RBAC, significantly simplified the codebase, reducing the potential for bugs.

Altitude-Sports

Website
Staff Software Engineer ( Sep 2020 - Jul 2022 )
  • Area: Engineering
  • Show details...

    As a Staff Software Engineer, I held a leadership role within the company, including being the head of the Platform team. In this capacity, my primary responsibilities included leading the development and configuration of essential tools and company-wide services, such as Temporal, Prefect, and Kubernetes. I actively championed best practices and knowledge sharing, delivering tech talks and courses to promote a culture of continuous improvement.

    In addition to my infrastructure-focused role, I played a key part in software development within critical business areas, including inventory, order and fulfillment management, refunds and returns, and our marketplace. My multifaceted contributions extended to the hiring process, where I interviewed numerous back-end and DevOps engineers. I also played a pivotal role in shaping the technical assessments utilized for candidate evaluation.

    During my tenure, I faced the challenge of aligning the company’s technical vision with the executive committee’s perspective, which led to a strategic decision. Recognizing the misalignment, I made the decision to leave the company, allowing both the technical and executive teams to pursue their respective visions independently.

    In terms of leadership style, I adopt a hands-off approach, emphasizing the establishment of best practices, robust documentation, and the provision of educational resources. This approach aims to empower the engineering team to thrive autonomously while scaling my influence within the organization.

Amazon Web Services

Website
Software Development Engineer ( Oct 2019 - Sep 2020 )
  • Area: Databases
  • Team: Elasticache
  • Show details...

    My contributions within the ElastiCache team were specifically focused on the MemoryDB project. The primary objective of the product is to ensure the data persistence of Redis clusters managed by ElastiCache. As part of this initiative, I participated in the design and implementation of a leader/follower election mechanism based on the Raft protocol.

    One notable aspect of this journey was fostering collaboration within the team. I facilitated discussions on foundational Object-Oriented Programming (OOP) design patterns, like the State pattern, to collectively enhance our understanding. This collaborative effort allowed us to effectively shape the architecture of the leader election mechanism.

    To promote knowledge sharing and collaborative decision-making, we adhered to Amazon’s standard practice of documenting design decisions. Design discussions were facilitated through written documents, allowing the team to contribute asynchronously and ensuring transparency in decision-making processes.

    Navigating the challenges of developing and testing in C++17, a relatively unknown language for the team, we adopted the GoogleTest framework. Emphasizing best practices in OOP code and testing methodologies, we worked together to ensure the reliability and robustness of the system.

    Prior to that, I focused solely the toolset and build system for this project, which was guided by principles of simplicity and broad utility. Our focus was on tools that seamlessly integrated across platforms (Mac, Windows, Linux) and were well-supported by both internal and community resources. This approach aimed to enable the team to concentrate on delivering business value without unnecessary tool-related complexities.

    Another part of the job was being on-call. As part of my on-call responsibilities, a noteworthy incident involved a Redis cluster of one of our biggest customers in the gaming industry, where the master node faced latency and connectivity issues. This incident not only required a thorough investigation but also provided an opportunity for cross-functional collaboration with engineers across the organization, including Principal Engineers, directors, and product managers.

Software Development Engineer ( Jan 2018 - Oct 2019 )
  • Area: Payments
  • Team: Non-Payment Suspension
  • Show details...

    My journey at Amazon started in the NPS (Non-Payment Suspension) team, which was within the AWS Commerce Platform organization. This organization was responsible for taking care of the commercial operations of AWS, including billing calculations, invoicing customers, collecting payments, etc. Our NPS team in particular was responsible for suspending/terminating AWS accounts that accumulated several unpaid invoices.

    However, during the first 3-6 months I had the opportunity to help the Invoicing team with an org-wide project that involved emitting invoices based on the customer’s specific country/region for tax and other legal purposes. This was particularly beneficial because I was able to learn about other teams within the organization, get familiar with their processes and terminologies, while also seeing the project through and deliver value to our customers sooner.

    After this project completed, I moved back to the NPS team to work on a new project with the goal of re-architecting the whole AWS Payments organization’s systems. The project was called Business Process Orchestrator, and it was intended to have a central place were we could define and operate the business logic of our organization without engaging with multiple engineering teams and wasting their time. The drivers behind such an ambitious project were the unmanageable operational load on our engineers, the huge amounts of effort that the different teams had to invest every billing cycle (monthly) just to coordinate the generation of invoices, and the constantly appearing issues that came up during each cycle that would cause all sorts of customer pain. In order to solve those issues while making sure that the bureaucratic inertia wouldn’t halt our progress, we designed our system using event-driven architecture, AWS-native components (e.g. Lambda, SNS/SQS, DynamoDB, etc.), existing internal tools/processes and popular programming languages (e.g. Java), and also developed libraries that would ease the onboarding of each team into this system.

Intel

Website
Software Engineer ( Aug 2015 - Apr 2016 )
  • Area: Security
  • Team: Data eXchange Layer
  • Show details...

    The Intel division that I joined was the Intel Security Group, which was a rebranding of the previously acquired McAfee. The main goal of this division was to provide security solutions to enterprise customers.

    When I joined the company, our team had been recently created and the first order of business was to transfer all the workload and responsibilities from an existing team in the US. This team owned what was known as DXL (Data eXchange Layer), a software service that would allow enterprises to distribute security updates to all their workstations. The service was essentially a broker that would handle all sorts of security updates (e.g. virus lists for the antivirus, operating system updates, new firewall rules, etc.).

    During my tenure at Intel, I focused on ensuring that we produced a DXL version that was FIPS 140 compliant, so that it could be commercialized to US government institutions. This involved an extensive amount of research both of the inherited codebase and also the FIPS standard itself. As part of this task, our team produced a few proofs of concept by reusing existing libraries that were already FIPS certified and that complied with Intel’s open source policies.

Vates

Website
Software Engineer ( Sep 2014 - Apr 2015 )
  • Area: Arris account
  • Show details...

    During this time, I worked exclusively for the Arris account as a contractor. The goal of the project I joined was to refactor the firmware that went into Arris’s set-top boxes. In particular, the goal was to implement an abstract interface (which was previously defined for us) at the firmware level, so that other teams could port application-level software to any equipment that used such firmware effortlessly.

    Unfortunately, Arris ended their contract with my employer 6 months after I joined, so during my tenure there most of my efforts were spent on analyzing the existing firmware codebase, the technical documents of the abstract interface and develop a couple of proofs of concept.

ClariPhy (now Marvell)

Website
Lead Software Engineer ( Dec 2013 - Sep 2014 )
  • Area: Embedded Systems R&D
  • Team: Software Development
  • Show details...

    I joined the R&D area due to my interest in software engineering. In particular, in joined one of the teams that was working on a muxponder to eventually commercialize at scale. The project was constantly delayed due to a lack of guidance in the software area, mostly because the staff at the company did not specialize in software development per se.

    The team that I joined was tasked with provisioning the muxponder device with a computer that would control all the peripheral devices (e.g. temperature and humidity sensors, Tx/Rx interfaces, etc.), provide an interface for development and maintenance purposes, update configuration settings, etc. In order to achieve these goals in a timely manner and given the resource constraints that the nature of the project imposed, I led the re-architecture of our development platform to leverage virtual memory and simplify the software development cycle, since this approach meant that we could use modern tooling and software development processes, and also reutilize open source software that was already available.

    Some of these improvements were:

    • Switch our entire codebase from C to C++ to clean up the code and apply design patterns when appropriate
    • Implementation of unit tests to ensure that we didn’t introduce any regressions during our development cycle
    • Reconfigure the embedded Nios II CPU architecture to make use of the MMU and simplify the software development process
Senior Engineer (B) ( Aug 2012 - Dec 2013 )
  • Area: RTL Design
  • Team: Digital Signal Processor
  • Show details...

    As a digital design engineer, my responsibilities involved analyzing predefined models of optical communication modules written in C++ and translate them into an HDL (in our case, Verilog was the language of choice) so that these modules could then be realized into an actual electronic system.

    The process mostly involved validation of such translation, ensuring that when both the C++ and Verilog modules were fed with the same input they would produce exactly the same outputs. This process required setting up all possible different inputs to the modules, capturing the outputs and comparing them, and running this cycle every time there was a change in the codebase.

    Given how crucial and time consuming this process was, I volunteered myself to develop automation tools that would allow engineers to easily specify the complete set of inputs to use as test cases, generate the expected outputs, execute the tests and detect any mismatch. These automation tools were then incorporated into our development lifecycle as a regression testing mechanism, allowing the organization to confidently write code and deliver the final codebase that would be eventually transformed into microchips.

Hewlett-Packard

Website
Security Consultant ( Apr 2010 - Aug 2012 )
  • Area: Global Information Services
  • Team: Leveraged Accounts (Central US)
  • Show details...

    As a security consultant on the Leveraged Accounts team, I was responsible for processing incoming client requests to grant/revoke access all the systems that HP managed on their behalf. These systems included UNIX-based servers (e.g. Solaris, HP-UX, RHEL, etc.), Microsoft Active Directory (i.e. Wintel), and several internal/proprietary systems individual to each client including car rental management systems, travel reservation systems, etc.

    Given the breadth of platforms, clients and requests, the role required our team to handle the technical challenges involving the quality of our service to make sure our output matched our user’s expectations while guaranteeing security compliance and SLAs. As a proficient UNIX user, I was able to quickly contribute to the team by providing assistance to my teammates as well as improving existing processes and tooling.

    By the end of my tenure as a security consultant I was acting as a team leader, which involved communicating with clients directly, onboarding and mentoring new teammates, assigning work to the team, and keeping track of our KPIs on a daily/monthly/yearly basis. As a consequence, our team went from a severe SLA violation status (which carried with it financial penalties and lack of customer trust) to a green status for 2 years uninterrupted.

Education

Academic

Computer Engineering ( Mar 2004 - Mar 2012 )
  • Institution: Universidad Nacional de Cordoba
  • Level: MSc
  • Link
Business Administration ( Mar 2011 - Sep 2012 )
  • Institution: Universidad Empresarial Siglo 21
  • Level: Degree
  • Link
Business Administration ( Mar 2013 - Dec 2014 )
  • Institution: Universidad Empresarial Siglo 21
  • Level: MBA
  • Link
Digital Marketing ( Mar 2015 - Dec 2015 )
  • Institution: Universidad Nacional de Cordoba
  • Level: Degree
  • Link

Certifications

Certified Kubernetes Application Developer (CKAD)

Courses and Specializations

Algorithms Specialization
Functional Programming in Scala
  • Institution: Γ‰cole Polytechnique FΓ©dΓ©rale de Lausanne (EPFL)
  • Issued on: Dec 22, 2018
  • Link to certificate
Deep Learning
Machine Learning on Google Cloud
Data Science

Projects

Authored

Shopify Terraform provider

A Terraform provider originally created to manage Shopify webhooks. The project was forked from an unmaintained one (edahlseng/terraform-provider-shopify), improved and made production-ready during my tenure at Altitude-Sports.

Salesforce Webhooks

The purpose of this package is to provide a convenient interface to the Salesforce API in order to create or delete webhooks in the Salesforce platform. It offers a simple interface to create basic webhooks for “created”, “updated” or “deleted” events on any SObject type (although such types must be triggerable, as specified by an SObject’s metadata)

I created this project from scratch to develop Salesforce components for Pipedream. It allows these components from receiving Salesforce events instantaneously by leveraging the Apex platform to execute code on Salesforce that reacts to events and sends them over to a specified endpoint via an HTTP POST request.

Open Source Contributions

I am an advocate of open source software, which sometimes lacks some feature that I need, or I encounter bugs that impact my specific use cases. Whenever possible, I contribute back to the software I use by addressing those needs I mentioned, either by implementing a fix, filing an issue, or reviewing a PR.

These are some of the projects to which I contributed:

Sentry
rstar
oh-my-bash
jekyll-TeXt-theme
jekyll-TeXt-theme
serverless-plugin-git-variables
Terraform AWS Provider

Technical Skills

Programming Languages

Below is a list of all the programming languages with which I spent considerable time making something of relative value (either professionally, academically or as a hobby or side project). I’m particularly curious when it comes to unknown (to me) programming languages, and so I played around with more languages than I can remember. This means that the list is not an exhaustive one, but it’s useful in this context.

NOTE: this list is sorted by preference, from higher to lower.

Python
  • Level: 🟒
  • Years of experience: 16
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“
Javascript
  • Level: 🟒
  • Years of experience: 9
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–‘
Terraform
  • Level: 🟑
  • Years of experience: 3
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–‘β–‘
Go
  • Level: 🟑
  • Years of experience: 3
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘
Scala
  • Level: 🟑
  • Years of experience: 2
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘
Clojure
  • Level: πŸ”΄
  • Years of experience: 1
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘
Rust
  • Level: 🟑
  • Years of experience: 1
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘
Java
  • Level: 🟑
  • Years of experience: 5
  • Preference: β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘β–‘
C/C++
  • Level: 🟑
  • Years of experience: 18
  • Preference: β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘β–‘
Ruby
  • Level: 🟑
  • Years of experience: 1
  • Preference: β–“β–“β–“β–“β–‘β–‘β–‘β–‘β–‘β–‘
PHP
  • Level: 🟑
  • Years of experience: 3
  • Preference: β–“β–“β–“β–‘β–‘β–‘β–‘β–‘β–‘β–‘

Infrastructure

These are the most important pieces of infrastructure software that I’ve worked with. Please note that the amount of tools used in this context can be quite large, so I’m only listing the tools at a very high level.

Operating Systems

Linux
  • Level: 🟒
  • Years of experience: 20
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“

Container Management

Kubernetes
  • Level: 🟒
  • Years of experience: 4
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“
Docker
  • Level: 🟒
  • Years of experience: 8
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“

Build Systems

Bazel
  • Level: 🟑
  • Years of experience: 1
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–‘
Make
  • Level: 🟒
  • Years of experience: 17
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–‘β–‘
CMake
  • Level: 🟑
  • Years of experience: 3
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘

Cloud Computing

Google Cloud Platform (GCP)
  • Level: 🟑
  • Years of experience: 8
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–‘
AWS
  • Level: 🟒
  • Years of experience: 8
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–‘β–‘
Heroku
  • Level: 🟑
  • Years of experience: 1
  • Preference: β–“β–“β–“β–“β–“β–‘β–‘β–‘β–‘β–‘

CI/CD

Github Actions
  • Level: 🟑
  • Years of experience: 2
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–‘β–‘
CircleCI
  • Level: 🟒
  • Years of experience: 5
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘
Travis
  • Level: 🟑
  • Years of experience: 1
  • Preference: β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘β–‘

Version Control

Git
  • Level: 🟒
  • Years of experience: 7
  • Preference: β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“
Subversion
  • Level: 🟑
  • Years of experience: 5
  • Preference: β–“β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘