Senior Software Engineer
Please view complete profile online.
I've been interested and working with technology and software since a teenager and always enjoyed understanding how stuff works and solving challenging problems. My first years working as a developer were mostly centered around creating native desktop applications. At the 2012 Buenos Aires RubyConf, I fell in love with Ruby and since 2013 started to work with Ruby and ROR creating web applications as a full-stack developer.
In 2015 I've become a team leader at Rails Systems SA, where we maintain and add new features to AgilGestión, a multi-tenant ERP and digital invoicing solution, that every month serves the needs of 500 small and medium-sized business in my country. In April 2020 we launched AgilPedido, an e-commerce platform that delivers orders to stores directly through WhatsApps messages with great success in Argentina, Colombia and Mexico.
Lead software engineer at Rails Systems S.A. 2015 to present
Independent software developer 2009 to 2015
Technical support & Junior developer at VissiSoft 2004 to 2009
National University Centro de la Provincia de Buenos Aires
Systems Engineer bachelor's degree
As a non-US citizen that will be performing work outside of the US, is perfectly legal to hire me as an independent contractor without a work permit. A signed W8-BEN form will be provided if requested.
A benefit for both parties is that the U.S. company doesn't need to pay or withhold the FICA contributions like Social Security and Medicare that can be as high of % 15,3 of the gross pay (IRS Source). Also, there is no need to fill W-2 or 1099 IRS forms:
“As a general rule, wages earned by nonresident aliens for services performed outside of the United States for any employer are foreign source income and therefore are not subject to reporting and withholding of U.S. federal income tax.” (IRS source)
I can also provide an invoice from a US-based LLC company for my services, that will be paid directly to a linked US Bank account.
An ERP and digital invoicing solution designed for small and medium businesses in Argentina. The product was created in 2013, with Rails v3.2 and Ruby v1.9.3. As of 2020 it has been in production for 8 years and serves the needs of 500 small and medium business every month
An e-commerce solution devised in April 2020 in response to the COVID situation to help restaurants and stores to sell food and goods. The novel characteristic of AgilPedido is that the final order is sent to the business via WhatsApp via a fabricated message that allows for a final human interaction with the customer.
Good code quality and getting the right abstractions takes experience.
Experience that only can be gained by writing, reading, discussing with
your peers and thinking about code and software. For long-lived
projects, I advocate for investing the time to write
clean intention code. Source is written for developers to read
rather than for computers to run; we are the expensive part nowadays as
computation is almost always cheaper in comparison. I support doing a
good deal of pair-programming and code reviews of all merge requests.
There are a lot of guidelines and knowledge in this area: clean code
SOLID principles, object-oriented design patterns or
CQRS for example. As an engineer, your job is to not get
very dogmatic about anything and to know that usually, every complex
technical decision has some kind of trade-off that you should
I strongly support that a good test suite improves dramatically the
extensibility and maintainability quality attributes of software. For
complex and business-critical projects is a must, as it is having a
sensible code coverage metric value and
Integration. It allows us to add features faster and with
confidence. Also, it provides a safety net around refactoring to improve
the internal design and battle the ever-present technical debt.
Tests came in different flavors: from
unit level to
acceptance tests that mount your application and exercise
it via Selenium for example. A good developer should understand which
amount to write of each of those and how to asses the value that they
are adding (as they are code to maintain too). I do
Test-driven-design sometimes and think it has its merits,
but I'm not completely orthodox about it. In some cases, I choose to
start by "exploring" a possible solution to the problem and then
writing the specs.
The terminal is where I belong and feel more comfortable, currently
using Bash and tmux for my sessions. That means also trying to grok the
suite of interconnecting
command-line utilities available
in the UNIX-like ecosystem that allows automating work with elegant
simplicity. No programmer toolbox can be complete without a solid usage
git source code versioning system. Also, I've been using
neoVim as my editor for quite some time now and I can say
there is no way back. Once you grasp Vim's normal mode power and it's
responsiveness it allows you to edit and type code at an incredible
Here is a, non-exhaustive, list of gems I've experience with: Sinatra, Puma, sidekiq, RSpec, Capistrano, byebug, jbuilder, prawn, prawn-table, roo, request-log-analyzer, savon, rack-mini-profiler, Capybara, selenium-webdriver, webpacker, sidekiq-satus, google_sign_in, gon, axslsx.
Although not exactly a complex one, in 2015 I've found a bug while working with Rails. I've located it in the source code, created a regression test and finally fixed it. The pull request was approved and merged into master.
When I started working with Rails I choose Firebird as the backend database, a tool I was used to. I've found a few problems in the driver gem, which was coded in C as it needed to bridge the Ruby world with the low-level database API. All the SQL Decimal and Numeric values were returned as Floats (which, if your work with money transactions you know it can be a nasty source of problems when base 10 rounding starts to happen). I've contributed a commit to the project to solve the issue.
The Pragmatic Programmer: From Journeyman to Master
Andrew Hunt, David Thomas (1999)
Domain-Driven Design: Tackling Complexity in the Heart of Software
Eric Evans (2003)
Patterns of Enterprise Application Architecture
Martin Fowler (2002)
Refactoring: Improving the Design of Existing Code
Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Erich Gamma (1999)
Design Patterns: Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch (1994)
Software Architecture in Practice
Len Bass, Paul Clements, Rick Kazman (2003)
Documenting Software Architectures: Views and Beyond
Paul Clements, Felix Bachmann, Len Bass & et al (2010)
Large-Scale Software Architecture: A Practical Guide using UML
Jeff Garland, Richard Anthony (2009)
HTTP: The Definitive Guide
David Gourley, Brian Totty, et al. (2002)
RESTful Web Services
Leonard Richardson, Sam Ruby, et al. (2007)
Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide
Dave Thomas, Andy Hunt, Chad Fowler (2013)
Agile Web Development with Rails 5.1
Sam Ruby, David B. Copeland, Dave Thomas (2017)
The RSpec Book: Behaviour Driven Development with RSpec, Cucumber and Friends
David Chelimsky, Dave Astels & et. al. (2010)
Metaprogramming Ruby: Program Like the Ruby Pros
Paolo Perrotta (2010)
Practical Object-Oriented Design in Ruby: An Agile Primer
Sandi Metz (2012)
The Well-Grounded Rubyist
David A. Black, Mark Thomas (2018)
Ruby Under a Microscope: An Illustrated Guide to Ruby Internals
Pat Shaughnessy (2013)
Ruby Performance Optimization: Why Ruby is Slow, and How to Fix It
Alexander Dymo (2015)