About

Hey! My name is Leonardo Braga. The best parts of my career never made it onto my resumé. This is where I keep them. Welcome to my blog.

Career bits that don't fit in a resumé

I started my career in the printing media, vectorizing logos on Corel Draw for cliché and photolith production. I fell in love with manipulating vector graphics, a skill that served me on countless occasions throughout my career. I remember spending a long time vectorizing many of the icons in shell32.dll and probably still have the .CDR in one of my old backups!

I pursued a career in design for some time and learned a lot, but when I started working with Delphi in 1998 while studying at COTEMIG, I realized that software development was my thing. I became obsessed with Delphi, Sockets, and the Win32 API, dedicating most of my time to building our final graduation project with my team. We created a system that allowed teachers to control students' computers in the laboratory remotely. Teachers could block keyboards to reduce distractions and broadcast their screen to all students via UDP.

Our project won COTEMIG's Technology Fair in 1999, and I founded my first company shortly after graduation. It didn't last long, but it taught me valuable lessons: I had a lot of growing to do, partnerships are hard, and a company needs far more than technical skills to succeed.

Our team during COTEMIG's Technology Fair of 1999
Our team and teachers, celebrating our victory

Over the next few years, I built a file compressor in Delphi, multiple ASP Classic web applications, and "hacked" the main software of the company I was working for to save them from themselves. They had lost the source code, and the software required a security dongle plugged on the LPT1 port to prevent piracy. The problem? The vendor had stopped producing LPT1 devices, so without disabling the protection the company couldn't sell new copies of their software.

I knew a little about editing hexadecimal files[1] and thought of applying the same idea to bypass the protection on the compiled software. After a lot of googling and trial and error, I finally managed to nop all the checks against the protection dongle. This bought the company enough time to re-implement the entire software, this time using a "modern" USB-based lock.

Around 2003, at the same company, I built a prototype showing the capabilities of an "eLearning" platform. It was nothing more than a chat app based on long polling, where the teacher and students could communicate in real-time with multiple pre-configured channels running in parallel. This prototype ended up becoming a major product, allowing students from all over the country to attend their courses.

I left to launch my second company, called Edunet, which focused on building an eLearning/video conference solution in Flash and Flash Media Server. This project taught me so much about how browsers integrated with plugins. I had to communicate between the Flash plugin and the underlying page to provide features not available in Flash at the time, such as file uploads. I also got some scars related to networking after battling proxies, firewalls, and all sorts of challenges trying to make data-intensive web applications work with Brazil's poor broadband infrastructure.

I worked on this video conference application for almost 2 years and built many features way ahead of their time, such as Dropbox-like document sharing and real-time collaborative whiteboarding. These features relied heavily on a Flash Media Server API called SharedObject, which was incredibly powerful but not without drawbacks. Syncing messages across multiple network clients is hard!

Content View Mode showcasing the real-time whiteboard feature
Conversation Mode with the chat area expanded
Content View Mode with the chat area collapsed

Another very interesting problem I worked on at the time was trying to understand how Macromedia was able to offer screen sharing from their web conferencing software while we, the consumers of Flash Media Server, couldn't. After a lot of research and probing on the plugin OCX, I realized that the feature was only available to content served from Macromedia's domain.

To overcome this, I thought of creating a webcam driver that would send captured screenshots from the presenter's desktop to other users in the call. I knew enough about screen capturing from my COTEMIG project, but sending a gigantic bitmap over the internet was not an option at the time. I tried to split the image into blocks and detect only the parts that changed between frames, but I didn't know an optimized way of building this, and CPU became the bottleneck. These challenges, combined with the fact that the Windows Driver Development Kit was far from user-friendly, made it clear that this wasn't the right battle to fight. Sometimes knowing when to stop is as important as knowing how to start.

The last memorable thing about that startup was a combination of services I built to allow customers to present their PowerPoint slides to the call participants. In a little more than 2 weeks, I had a PPT to SWF converter running as a Windows Service written in C#. It would watch a mapped network folder where the back-end dropped the PPT files from customers and use the COM services from PowerPoint to export the slides into PNGs, dynamically generating SWFs from them.

This feature showed me the power of implementing something in a "full-stack" way. By owning the entire pipeline, I could fine-tune the user experience to make the flow entirely transparent to customers: you'd upload a PPT, and your presentation would just pop on the screen of all participants less than a minute later.

My next career move was to a company entirely focused on eLearning, and most of my projects there were implemented in .NET, Flash, Delphi, and a little C++. But the highlight of my time there was the people I met. They were some of the most brilliant minds I had the pleasure to work with. Many of them ended up moving to Canada as well, and we continued to have fun creating cool things together.

Years later, working as a consultant for GEVISA (a GE Transportation plant in Brazil), I built quite a few exciting projects. Many of them were born out of observing our internal customers' problems. In one project, I extended their Active Directory with custom metadata on users and groups, allowing me to correlate cost centers and perform fine-grained access control over the data. In another, I leveraged an existing Excel file maintained by the plant managers as a pseudo-database. This file, cached every 2 hours, powered an intranet page with a rich UI and filtering capabilities.

In 2007, even after years of experience working in the software engineering industry, I applied for a Systems Analysis and Development Technologist course since a formal diploma was still required for certain things like immigration. For those not familiar with this type of degree, in Brazil, it is a mix of a bachelor's and a college, giving you the same graduation "level" of a bachelor's degree but preventing you from continuing your academic path into a doctorate or a master's, for instance. In this course, I met the folks who would later join me as business partners in the third company I founded, a consulting firm named Augix.

A door plaque with the logo I designed for Augix
Augix's first office, in the garage of my business partner's house

Besides consulting services, Augix had two products: an internet access management portal, named AugiXpot (yeah, today I know how bad that sounds) and a bank slip generator, called MeuBoleto. The internet access management solution gave me exposure to Linux, networking and tons of PHP. The bank slip system was primarily built in .NET with a UI built in Adobe Flex, and also gave me the chance to dust off my modest design skills.

AugiXpot solution diagram, in Brazilian Portuguese
Working through the night on AugiXpot, trying to get the load balancer to work. Note the GPRS USB-based modem connected to a router
Our product booth in a small business event promoted by SEBRAE

We had great clients and a solid reputation, but growing a business in Brazil without maneuvers to avoid paying taxes was a herculean task. Between the economic headwinds and the constant pressure to lower fees or keep open scopes, we found ourselves running just to stay in place.

During those tough times, a friend and former manager contacted me about an opportunity in Canada. It wasn't easy to choose between my dream of building a company and the chance of living in North America. I decided to participate in the interview, even though my English was intermediate at best. Surprisingly, the interview went well, and the company - Questrade - decided to take a chance on me. Over the next year, I gave my best to prove my value, they sponsored my work permit, and I rebooted my life to come to Canada.

At Questrade, I worked with brilliant people on many projects using AngularJS, Node.js, .NET, and everything in between. But I believe the most memorable aspect of my time there was having the chance to extend to others the same opportunity I was given.

And that's what I did. I progressively referred many of the fantastic software engineers I knew to the company, and one after the other, they got through the interviews and came aboard to shake things up here as well. Among these referrals were my former partners, and the relationship between the companies that followed was so successful that they were acquired years later. That acquisition closed a chapter that changed many lives and started another that brought more investment to the technology industry in Brazil.

Here's to another 20 years of a crazy - and fun - journey...

[1]: In 1998 I got my hands on a copy of the game SimCity 2000 and found in a game magazine a way to use MS-DOS debug command to increase the in-game money to ~$2 billion by loading your brand new city save file, searching for 00 02 4E 20 and replacing it with 7F 02 4E 20.