About Me
I'm Raul, married and father of 2 kids, I'm currently living in Quilmes (Buenos Aires, Argentina). I graduated from Universidad Argentina Kennedy with a Bachelor's Degree in Computer Science. Listening, Testing, Coding, Designing... it's a quote I like to describe how I approach programming in general. Domain-Driven Design it's an approach I try enforcing in teams to help engineers and business stakeholders work together. Toyota Kata it's a preferred approach to learning and coaching others team members.
My first Computer โจ๏ธ
When I was 11, I saw advertising about a computer, Commodore 64, in a magazine from Spain. I immediately wanted it, and my father got that for me, my first computer! (I still have it ๐).
I started reading a lot of these K64 magazines, learning BASIC, coding a lot, it was moving for me, and fun... โจ๏ธ๐คช
Years later I started learning more languages: QuickBasic, Logo, Pascal, TurboPascal, Delphi, Borland C++, Java, I even played a bit with Smalltalk and Squeak environment... Got new computers too: PC XT, PC AT (with a "Turbo" button)
At some point, I discovered Apple๐ too, and it was moving, especially because of their focus on "passion" over tech specs, as in the famous Think Different advertising.
At the University๐
Started going to Universidad de Buenos Aires but I struggled a lot trying to have time to study (I started working, 1 year later, in Galicia bank) so I moved to the Universidad Argentina Kennedy and had a Bachelor's degree as a System Analyst. It was though and fun too. I remember good times learning things like the Huffman Algorithm for compression or lots of hours implementing a C program to solve the "8 Queens puzzle". I also started discovering and reading some work of authors like Kent Beck, Martin Fowler, Ward Cunningham, and Alan Kay. Smalltalk Best Practice Patterns was such a great book, so simple and easy to read.
Working ๐ป
Even working for the same company in some cases, I was on lots of projects. Here is my working experiences so far, starting from the newest project:
Jemstep
As a contractor from Bonzzu Scala, MongoDB, PlayFramework, and a lot of awesome engineers from Southafrica, Los Altos, India, Peru, and Argentina working together on a FinTech product. Challenging not only because of the tech stack and business processes but also because of so many timezones. I helped building 2 teams, one in Peru and other in Argentina, both growing from zero to around 16 members (developers and testers). From understanding current Development Workflow in place in Jemstep, to understanding tech stack and applying that on our side. Also taking interviews and promoting best practices at all levels. A lot of learnings here. And fun too, traveling to Southafrica, Los Altos, and Peru for several times, awesome people, drinks and food.
Upwork
Worked here on the actual communication platform. It was Java and Spring and learned about microservices too, we wrapped services with Hystrix, so it was easy to monitor for us, in real-time. That was great. Also worked on managing WebSockets using Atmosphere from AsyncIO.
Shimmur
I had short participation here. It was a Social Network for celebrities. I worked on a REST service written in GoLang.
SecurityScorecard
It was a Startup from NYC in the US. I worked remotely from Argentina, and they took me to NYC for one week to meet the team, awesome and warm people, and what a beautiful city. Awesome. I did some Groovy/Grails and NodeJS/Mongo here. I even created a DSL to analyze threats and give ratings. It was stressful, but I liked it, a lot.
Despegar
Great innovation environment. Started doing stuff in Scala there. Learned a bit of Hazelcast too. Worked on internal services providing information about flights.
Mural
I learned here about Lean Product Development. So much talent in an initially small team. I started working on backend services in Java running in Google AppEngine, but then we moved into NodeJS on Heroku, and then into Azure. Lots of MongoDB and WebSockets with socketIO too, and even frontend stuff with Google Closure Compiler making JS code look like Java code, crazy ๐ฎ. Awesome people, and successful project today, as a leading tool for Design Thinking.
Vostu
A gaming company, was a big one at the time, that created games for Facebook and Orkut. I worked writing integrations for Facebook, Orkut, and Playdom.
Three Melons Studio / Playdom
A small gaming studio from Argentina. So much talent here, really. Worked on ActionScript3 and PHP, on backend services for the games. The founders here created Mural some years later.
Sonico
My first job in Argentina after living in the US for 2 years. Sonico was a Facebook wanna-be from Argentina. I worked Integrating Apache Shindig here too, but on a PHP environment. It was a successful integration, even Zynga ran games on our Social Network after this.
As a contractor from Globant Awesome place and awesome people here too. Google created OpenSocial as a specification (as a response to Facebook Apps) and Apache Software Foundation members implemented Apache Shindig (the spec default implementation, an OpenSocial container). So I helped integrating Shindig into the Linkedin InApps platform. Worked on Eclipse / Java, on an ultra-powerful Mac Pro desktop (and was also given a MacBook Pro too), it was a dream setup. Made my first production mistake here ๐ข: Forgot to enable a cache on a UI component, slowing down the landing page, and putting a lot of load on the databases. It was solved (rollbacked) fast, fortunately. If you never broke production, did you ever work there?๐
As a contractor from Globant So good... still remember the people there, the whole experience, the food, such a great place, the buildings, the teams, I even saw the founders while eating lunch. I was surrounded by awesome engineers at the time (Lars Petrus former speedcuber world champion, Aaron Peckham founder of urbandictionary - I remember him sharing a "word of the day" definition when finishing daily standups -, also knew some members of Apache Software Foundation there). Tech aside, I remember music bands playing live for us on a casual Friday, or even getting Edwin Aguilera (at the time, a cartoonist for The Simpsons, who was presenting a book there in Google HQ) drawing me, so yes I'm an unofficial The Simpsons character now ๐, as can be seen here: Lived with my wife for 2 years there in Mountain View, CA. My first son was born there too (in Sunnyvale). I miss California. Btw, worked in Java, TestNG, XML, Javascript.
Scotish Television
As a contractor from Globant My first time working abroad, for nearly 2 months in Glasgow (I thought I was good at Spoken English, noticed there how wrong I was). I even took some short trips, including Paris, London, Edinburgh and Aberdeen. Java and OpenCMS for an online news service launched by a TV channel from Scotland.
Telecom Argentina
Not much fun... But learned and applied JMS for internal messaging, more Java here.
Cerveceria y Malteria Quilmes
Cool people, and cool project about Sales reporting services in Java and JasperReports. First time using an ORM tool (a paid one, Oracle TopLink).
Banco Galicia
Here I heard about "Extreme Programming" and the WikiWiki Web for the very first time. Worked integrating mainframe services and Lotus Notes with internal authentication services. People was awesome, technology not much.
What I consider my strengths
I try to understand the explicit and implicit processes in place, look for good practices being applied, and understand expectations at all levels (including tech/coding and also communication aspects). I focus on delivery. I approach key members to know them and be known by them too. Once there. I assume engineers are eager to help others and deliver value, based on this I work on setting up all stuff needed for the team members to succeed, including tools, permissions, documentation, processes in place, SLDC, and development workflow, etc.
What I consider my weaknesses
I don't think I'm good at giving a presentation. I'm working on it, by trying to close loops more quickly whenever I'm learning something new worth sharing with coworkers (I started by writing blog posts about books I read, still learning).
What I consider when discussing approaches for a solution
- Important vs Urgent: Deadline makes the difference
- Best vs Good Enough: If Best is not feasible based on a time constraint, then go ahead with Good Enough and keep track of the eventual tech debt.
- Sense of Urgency: Helps when the focus is key, usually deadline enforces it.
- Business view on the issue being discussed, to better understand expectations.
How do I handle a conflict with a coworker?
Whenever we consider different approaches, I try exposing what's good and not so good on each, and then show why one approach would be better than another. I also consider discussing priorities on what is being considered in each approach, pointing out the difference between important and urgent, where urgent means a closer deadline. This comes in handy when discussing between best vs good enough solutions.
What motivates me more about my career?
Being able to apply technology to empower business, causing an impact on actual people and business. Daily, I like learning more about the business and product side of the project, to better reflect that in the code, applying Domain Driven Design concepts.
What frustrates me more about my career?
Leaving the engineering part left aside when working on a product. Test coverage, instrumentation, monitoring, good coding practices, are core to any project so there should be time for that too (even when these are not seen by the end-user). Also the lack of focus on Soft Skills (and related processes) on any team it's something that usually breaks the patience of anyone with good wills. A simple question like "what needs to be done?" could not easily be answered at times, so the lack of access to business stakeholders it's also concerning to me, whenever it happens.
How do I tackle a challenging change?
I try considering what's good and not so good for the available approaches in the new scenario, consider "best" vs "good enough" and "important" vs "urgent" here. Once I come up with a plan I try to focus on executing it (leaving behind the frustration of having something is done that may not have value now). Embrace the change is the key here.
Something I usually push for in any project/team?
Make sure we all have a clear understanding of the Development Workflow (and update it whenever an exception happens more than 3 times) and make sure we are aware of the queues in-between steps. I try favoring ownership over just executing tasks.
Leading a Remote Team:
In my experience the team members once proved that they are eager to learn and be productive as a whole, they only need the right tools and processes in place. Then it's a matter of following up on some particular metrics and making sure the priorities are being set correctly so the focus is on the right place. It's also important to be always reachable to move away from any roadblocks, and be a facilitator whenever any miscommunication happens or there must be a collaboration with other teams.
About the tools and processes they need in place:
These are some of the regular ones, for both Developers and Test Engineers: The right set up and toolset in local boxes, accesses (to check logs, run queries, run tests on test environments, etc.), clear processes (a Development Workflow must be clearly defined here, with clear ways to move between stages), the right channels and main point of contacts in the team for usual tasks (asking for accesses, requesting a test or a code review, etc.).
...besides that:
Learning, taking courses, sharing knowledge, writing documentation, hosting meetings, etc. are all tasks that make you and the rest better engineers, but it must be clear that at some degree you are being paid to close issues (bugs, features), so: Delivery wins, always.
On a final note: I try to help the team be better at 3 main topics: Hard Skills (tech stack in place, processes), Soft Skills (communication), and Business (learn and understand the one we are in, trying to apply Domain Driven Design concepts and practices).
The Development Workflow:
Usually involves a clear set of consecutive stages for a given issue (feature or bug), and shows its current status, that's why it needs to be always up to date. The concept of DONE is key here: Merged to master? deployed to PROD? approved by a Product Owner?
The stages:
- Backlog (kind of a bag where all issues are created the very first time)
- Next Feature (issues with priority for the next iterations)
- In Development
- In Testing
- In Code Review
- Deploy
Queues? Kanban!
Usually, an invisible queue may appear between stages, here is where Kaban (limited number of entries per stage) helps (avoiding bottlenecks).
Soft Skills I try to enforce:
Usually learning the skills in this category helps communication at all levels. Remote working adds a level of complexity here, where language, culture, and time zones apply. Communication tools are key when remoting.
Some of the practices I try to enforce:
- Minimize Communicative Distance: Depending on the tool, we need to share a sense of trust to minimize uncertainty when communication is needed. Every tool may have its own rules: Email may not be immediate. Video call is real-time but usually needs to be scheduled. Chat assumes you should be available (so you may need to communicate if you are not on the computer now). In any case, it's a must to maintain the context of any conversation and leave evidence of any agreement.
- Sharing Knowledge: Written documentation always helps, drawings/diagrams usually help more, I tend to promote these (I'm a fan of https://mural.co), but it's required to make references to existing information (to avoid duplication) and update it whenever needed.
- Mentoring: Help other engineers, discussing tech approaches, pros, and cons.
- Couching: Regular 1:1 sessions for engineers that want to take the next step in their careers.
- Accountability: Showing that you own some component or business logic helps others address issues on areas not totally known by them. Taking responsibility for this is key.
Some of my tech interests:
All things related to backend services written in any language running on the JVM (I currently have experience with Java, Scala, Groovy/Grails), REST services, monitoring/instrumentation, automated tests, CQRS and Event Sourcing, Software Design and Architecture, Development Workflows.
Some authors I follow:
Kent Beck, Ward Cunningham, Martin Fowler.
The tech stacks I worked with:
- Jemstep: Scala, Akka, Mongo, Playframework. Worked on backend services for an ongoing project.
- Upwork: Java, Hystrix, Atmosphere (Async-IO). Worked on backend services for an ongoing project.
- Shimmur: Golang, Gin, Gorm. Worked on a REST API for a social network.
- SecurityScorecard: MEAN JS, Groovy. Built a DSL to write rules describing how security scores must be calculated.
- Despegar: Java, Scala, Spring, Mongo, Hazelcast, PlayFramework, Akka. Worked on backend services for an ongoing project to produce stats.
- Tactivos / Mural: Java, Google AppEngine, Jenkins, Google Closure JS Compiler, NodeJS / ExpressJS. Built REST services.
- Vostu: Java, Maven, Spring, Mysql, Memcache. Built server-side components for games and integrations.
- ThreeMelons/Playdom: ActionScript3, Json / JsonSchema. Built a client library to consume a REST service for games.
- Sonico: PHP and Apache Shindig. Built an app container, to integrate apps from third-party providers
- LinkedIn: Java and Apache Shindig. Built an app container, to integrate apps from third-party providers.
- Google: Java, TestNG, XML, Selenium. Built an internal tool to automate manual tests. Also, Javascript to write automated Tests for OpenSocial Shindig app container.
- Scottish Television. Java, OpenCMS, Hibernate. Built components for OpenCMS.
- Telecom: Java and JMS (delegating to IBM Websphere MQ Series). Built component to send messages to other internal services.
- Cerveceria y Malteria Quilmes: Java, Oracle SQL, and Oracle TopLink (an ORM framework for Java). Built backend services for Point of Sales.
- Banco Galicia: Hibernate, Java libraries for Vignette, and Lotus Notes. Worked on backend services for an intranet.
My learning process
Whatever the topic is, I usually try following this pattern (whoever read Toyota Kata work may know this already):
- Where do I want to go?
- Where am I now?
- What would be the next step?
- What are the obstacles to reach the next step?
- What experiment can I try to overcome these obstacles?
- Repeat! (go back to step 1)
Other interests not related to work?
- Photography
- Travel
What else? ๐จ๐ฝโ๐ป ๐ป ๐
- More about me and how I approach my work ๐จ๐ฝโ๐ป
- Once I tried brewing beer at home๐ป
- Some posts about books I read and liked ๐