Rafael Romão

Software Architect | Backend Developer rafaelromao@gmail.com

Rafael Romão is passionate about software development since 1998 and have worked as software developer since 2002, working mostly with Delphi, C# and Java, among a few other things.

He has experience with web, desktop and distributed applications development, with a strong focus on Microservices, in business areas like laboratory automation, geographic information systems, electric utilities management, messaging systems and retail market.

He is dedicated to his job and satisfied with the career he's chosen, pursuing quality in everything he does, always up to date with new trends, technologies and methodologies.

In his spare time, he likes to travel, hike and practice nature photography. To know more about him, check his developer story below.

Developer Story

Where it all began

Am I good enough?

Back in 1998, when I was 16, a friend of mine lend me a copy of a Delphi 3 book. At the time, I used to work as storekeeper and all I knew about computers was how to use Windows 3.1 and 95, Word 6, Excel 5 and MS-DOS. It was a informatics course pack common in Brazil at the time.

After reading this book, I used my spare time at work to go to the company's office and use my boss's computer to implement some examples and create small applications, using Paradox, DBE and Delphi 3 to automate some small tasks. My boss liked the idea of receiving free software and said I could use all spare time I had in his computer.

5 years went by and I decided it was time to look for a real job as a software developer. By that time, I had accumulated a lot of experience and was convinced by a friend, a Clipper programmer, that I was already good enough to give this step. I was 20 at the time.

I grabbed the yellow pages, remember it was early 2002, and listed the name and phone number of all software development companies in my city. It was not that many. Then the next step was to call each one, inform I was interested in appling for a programmer position and ask for an e-mail address to send my resume.

Well, it was sassy, but it worked, and in May 2002 I was already working as a software developer, in a company that had clients in Brazil and Switzerland. Since 1999 I was already studying english by myself, to be able to understand the information I used to find about Delphi in the early Internet, and this knowledge was crucial, since from the beggining, english was already the default written language at work.

The First Real Challenge

How do the professionals work?

I remember seeing that messy code at my first work and thinking, well, code is more complicated than I thought. I have so much to learn to be at the same level as these guys.

Actually, that code was just messy, but I was only able to realize that years later. Lots of patterns and idioms common to structure programming, a years old Delphi desktop app that needed to be refactored to be moved from DBase to Paradox. Not that much of a improvement, but significant at the time.

It was a project from a brazilian customer. The senior guy told me I should not touch the other project, from the international customer, until he said otherwise. Something that took about 2 years to happen.

The Joy of Java

Amazed by OOP

Delphi 7 supported a few OOP features, but not all of them. In 2003 I had a chance to take a Java programming course (J2EE) and along with it, apply the OOP concepts I had studied in the last few years in its full glory.

This course introduced me to the Java 1.3 and J2EE. I honestly did not like the "do it as I say" style of J2EE, but the OOP in practice was amazing.

Not only for me, but for the whole team. In the next weeks we started to see camel cased code methods in Delphi code, a mistake that we soon came to regret.

Going International

Now they trust me!

In the last two years, I worked mostly on Blood Bank Management systems. I had the opportunity not only to learn a new business domain but also start to develop and apply my own programing idioms. Now I could make my own mess, and learn with it too.

After some time, the demand on the international client started to increase and my good english skills, at the time only writing and reading, helped me to be accepted in the team.

A few years later, 2007 to be more precise, I was travelling to Europe to work on site. That was my first experience with a multiregional team and was crucial for my carrier as a software consultant.

Tasks before TPL

Concurrency with style
TPL was only introduced with .NET Framework 4, in 2010. The year was 2007 and we had to develop a new software for the international client. An automation tool to drive a new laboratory robot they were building, and after the bad results another team had with their first incursions with Java, and the obsolecence of Delphi, we decided to go with the shiny C# 2.0.

This tool had a simple UI, but had to drive a set of motors in parallel, to make the robot perform the operation requested. All of us were good with threads, but that in the amount we needed this time, it would be tedious and error prone. That was when I had the idea to write a Task class that would perform a specific operation in a background thread. I liked to see the name Task in TPL years later, instead of Future, like in Oxygene and Java.

Software Architect

First big challenge

A new and big contract, a large system, large team and more reasons to be more assertive in how the system had to be developed. It would be our first experience with web services in the backend side.

It was 2008 and I could work for the first time as Software Architect, describing how the software would be structured and creating the foundations on which the development team would deliver the new system. Among the challenges, create a replicable module structure so that new features could be delivered easier, but that was not my favorite part.

Delphi was successful in the 2000's mostly due to how their component libraries and drag and drop style made our lives easier, and since my first days as a programmer I already enjoyed developing VCL extensions. This time, I could write a whole component library to be used as the client side library for our RemObjects webservices, an alternative/extension for their Data Abstract. That was one of my first big accomplishments and sadly, as GitHub was not a thing at the time, is probably lost by now.

Time for a big change

Another job, another challenge?

9+ years working for the same company carries a lot of stress, and it was time for a change. Up to this point, all that I did as a software developer was to build and maintain Desktop applications, using either Delphi or WPF, but for a few years by then the Web was the trend. ASP.NET Web Forms was being replaced by ASP.NET MVC, SPAs were being born after the huge jQuery success, so the conclusion was obvious: To be marketable, I had to learn Web Development.

The year was 2011 and so far few were the software development books I've read. You can see more details here. But this time I had to stop using only blog posts and forums as continuous learning resource and get something more reliable. I started with Clean Code, HTML5, jQuert, CSS3, ASP.NET MVC 3 and TDD. They were certainly helpfull, but for my surprise I received a call from someone I didn't know at the time asking if I were a WPF developer that they had I job opening and I was recommended in a developers forum. I still don't know who made this recommendation, but there I was, once again working with WPF.

For sure I had new challenges, but the migration to Web Development didn't come yet. What certainly came at the time was my appreciation for reading technical books.


As it is called now

Almost 2 years working mostly with Geographic Information Systems in WPF, the company CTO called us to a kickoff meeting. A new project, his dream platform, individual backend applications responsible for individual tasks. Each application would do a single job and communicate the results to the others via a high speed message bus. He was excited, but also frustrated, since it was not the first time he was trying to implement a solution like that. My eyes sparkled with that architecture and I asked him to trust me with the job, which he did. That was my first experience with a large backend system and the results were not as good as they could be, but it was a R&D project that could achieve its goals. One of the outcomes of this project was the Reactive Services framework, which I like to present as part of my portifolio. I only uploaded it to GitHub a few years later, but it was born in 2012. An embrio for a Microservices Architecture, before the term become popular. A few other concepts were starting to become a trend at the time, like Docker and Spring Boot. Today, we have yet Spring Cloud and Kubernetes, Microservices is now a fully grown architecture and the one I'm passionate about.

A step back

No more pressure

At this time, I was working as a Software Architect and Team Lead, but a new opportunity arrised. Leading a team in a different company in a scenario that was more like what I was looking for. I went for it, but something went wrong and when I started in the new job, the promissed leading position wasn't available anymore. I got hired and had a position available for me, but as a regular programmer. No leadership role, no software architecture to be responsible for. Turns out it was a blessing. I was there with the compensation I desired, working with something I love, coding, but without the extra pressure and responsibilities.

Obviously, that couldn't last, and I was prepared for that. I was hired occupy a much higher position and being paid for that, but that was not what I was doing in a daily basis, so less than a year later, I got fired!

A step forward


Since some years back, I was getting ready for a position in an international company, working for international clients again. My English skills were good already, but remember, I haven't been a Computer Sciences student, and Algorithms was not something I learned for good in my self-taugh studies or graduation courses, so I had to compensate that flaw. For sure that topic would be present in any international technical interview.

The Sedgewick course in Coursera, the CLRS book and Ace the Programming Interview got me covered. And surprisingly enough, the undergrad in Mathematics was crucial, since that job required experience with software optimizations and lots of mathematics. A position that was oppened all of the sunden, a week later I got fired from my last job. I've got the international consulting job and soon, once again, became a reference among my coleagues.

Back to Java

Don't pick fights you can't win

Since that first experience with Microservices, back in 2012, I was working mostly with C# and .NET, in the backend side. Microservices is now a daily thing and devops work is something I can't stay a single day without. Through the last decade so far, it's 2020 as I'm writing, most books I've read were ilustrated in Java, most devops work I do in a daily basis requires interacting with a Java ecosystem, and the market in San Francisco is not quite open for .NET and C#, even after the rise of .NET Core. Microsoft Development Tools are great for productivity and performance, but the lack of a bigger and mature ecosystem outside Microsoft Azure, along with a smaller development community, made the opportunities become scarce.

It was time to check what this new Java 11 was all about. My last contact with the language, other than simple helper tools and studies, was years ago, in Java 6 I guess, so it was worth some reading. Also, I wouldn't convince anyone I'm good at Software Architecture without at least knowing well what Modern Java has to offer.

The path that I chose was to learn and be certificated in Java 11 SE and later the Spring Framework, and I can tell the suprises in this learing path are really amazing. Since the end of the first half of 2019, I got into a intense study routing and by the mid of 2020 I could already feel totally confortable and productive with the language and its main frameworks and tools.

Next steps? More books, more Java, more Software Architecture. Learning never ends for a Software Developer.


University of Minas Gerais - UFMG

Licenciate in Mathematics
I started this undergraduation when I was already working as a programmer. I could not afford a payed graduation at the time, so I choose a public one (we have exceptional public undergraduation courses for free in Brazil) that could allow me to study at night and also prepare me, along with my seft taught, to take an specialization course in System Analysis later.

January 2003 - July 2007

University of Minas Gerais - UFMG

System Analysis
In this course, I could ratify most software development concepts I've learned by myself in the prior years, as well as correct some misconceptions. At this point, I had what some companies were starting to consider essential for a programmer in Brazil, a software engineering degree.

August 2007 - May 2009

Institute of Management and Information Tecnologies - IGTI

Software Architecture
At this time, Software Architecture was already my area of choice into software development and I a course on that area was still missing, so I took it. I learned a lot during these two years and that definetly changed my carrier, not only regarding technical skills, but soft skills as well.

August 2012 - December 2013

University of California - San Diego / Coursera

Big Data
It's 2016 and the amount of data our software have to handle is now humongous. Traditional software development techniques would certainly fail and I had to be prepared for this new scenario. This course helped me to understand it and tackle its new challenges.

August 2016 - July 2017