Maxim Leonovich

@pacavaca

My engineering journey to date

It all started when my father let me play with a soldering iron for the first time. Together we made a simple buzzer out of an old relay. Basically, if you apply an AC current to a relay, it will buzz, so we just wrapped it in a plastic box and soldered in two wires. I took it to my school and was showing it to everyone I knew. I was in the second grade.

A relay

From that moment on, electronics became my hobby. While my friends were playing football outside, I was reading old Soviet books, and trying to make simple circuits work, even though I didn’t understand what exactly was going on.

The title says “for the beginner radio-amateur”

Analogous electronics was fun, but more complex circuits, like FM transmitters or receivers, rarely worked for me. Calculating and tuning them required solid knowledge of physics, which I didn’t have at that age. No wonder I was really amused by logical elements. It was so much simpler in the discrete world: no resistors or capacitors, just ones, and zeros. Draw a few boxes with different symbols inside, connect them with lines, put it on a board, and bang! You have a super fancy thing with a bunch of LEDs blinking in a specific order.

As soon as I learned what the computer was, I immediately started dreaming about having one. I’ve got mine only in 7th grade, and before that, the smartest device I had was an old Soviet programmable calculator. It taught me concepts of GOTO, IF, and a WHILE-loop. It also had a decent 5V DC power adapter, which I used in dozens of my little projects, but real computers were so stunning and mesmerizing.

Electronica MK-61

The early 2000s were the era of gaming clubs and “internet cafes” in ex-Soviet Union. I was saving all my pocket money so that I could once or twice a month get an hour of internet surfing at the local post office. I was quickly learning how the internet works, what are the websites, email, and search engines. By the 6th grade, I was already dreaming about having my own homepage. I even had one, created and hosted at one of the WYSIWYG website services, but it didn’t count as I didn’t program it myself.

A typical computer club

I’ve got my first computer right before starting my 7th year at the school. Single core AMD Athlon 2000 XP, 512 Mb Hynix RAM, 80 GB Seagate Barracuda HDD, Nvidia GeForce 4, and a 17" Samsung 76BDF CRT monitor — pretty decent configuration for 2003. My very first CD was a compilation of various pirated (in our area there was no other) web-design software, along with an interactive HTML and JavaScript tutorial. Pretty soon I officially had a homepage, fully designed and implemented by myself. It was a long clunky thing on a yellow background, full of random text uglified in Xara 3D. I was the happiest kid on the planet!

I didn’t know what exactly the word “dynamic” means, but I knew for sure that my “web pages” had to be more “dynamic,” so pretty soon I’ve got my first book on a real programming language: an introduction into PHP. And then another one, about Delphi — a fancy, object-oriented Pascal, created by Borland.

My first programming books

Early 2000s were also the time of amateur ethernet LANs tangling around every big residential building. I was connected to z53, a.k.a. Zone 53, named against our district number. My nickname was BSOD (a.k.a. Blue Screen Of Death) or sometimes [b.s.o.d], or even -~=[B$0d]=~- on ocasions. It was a wild time of unpatched, pre-service pack one windows machines, which anyone could remotely reboot by simply typing shutdown followed by an IP in a terminal. I’ve created a simple prank program in Delphi, which I would sneak onto my classmate’s computer, and then remotely open his CD-drive, flip the screen, or send weird sounds through the speakers. I’ve almost reached the state where I could monitor his screen, but suddenly antiviruses got smarter, and all my prank efforts were shut down. Nevertheless, I’ve learned some basic networking.

These things you would find on every roof or service floor of any residential building

Somewhere around 2005, my school informatics teacher introduced me to the city’s programming club. Kids there were learning Pascal and then competing in solving various algorithmic puzzles taken from informatics olympiads. Best ones were sent to the national olympiad, and from there to the international, etc. It was a place full of interesting people like this guy, or the other guy, whom I introduced to Linux, and the next month he was already building Gentoo from scratch… in the 5th grade.

Competing in olympiads taught me some real programming and algorithmic thinking, which helps me out till these days. That was also the place where I started learning English, as we were often practicing on tasks taken from old international contests and also competing remotely in USACO.

Competitions were fun, but I was leaning more towards “tangible” programming — making something, that many people can interact with, and feel the result. I’ve created a very basic CMS in PHP. It didn’t have a template engine, and the whole logic was primarily based on overusing the include statement. I didn’t have anything in particular to tell the world about, I just wanted to program, so I was simply running a website for someone else on my CMS, and it was about gymnastics. Every kid was sick about parkour at that time, so the second user of my CMS turned out to be my school friend, who was running a local parkour portal.

By 2006–2007 I had a decent HTML/PHP skill, so I started taking occasional freelance jobs. Mostly they were simple PSD to HTML contracts, but the biggest one was a “serious” application: we were scrapping news from some Spanish websites, running them through Google translate, and re-publishing in English. It was a savvy way for the customer to game search engine ranking algorithms, and for me, it was a rather complex several months project, that gave me first real $200, which I spent on buying an electric guitar.

Two websites that were served by my first CMS (from web.archive.org)

I wasn’t particularly good in programming olympiads and never compete at the international level, but my national results allowed me to enter a top university in the capital of Belarus without passing any exams. I’ve chosen Applied Math with specialization in Information Security. University education consisted mostly of hardcore math, to which I developed taste only by the end of a third year, when it was already too late, and less than mediocre programming courses. I’ve gained some useful knowledge about cryptography fundamentals, but mostly, university taught me how to pass exams while putting in the least effort possible.

The summer after my second year at the university I spent in the USA. My school friend and I joined a Work & Travel program. It’s a program, where you get a J1 visa for a summer and are supposed to work for three months at an entry-level job somewhere in the USA. The fourth month you can spend on traveling around the country. Our summer destination turned out to be Atlantic City — a b̶e̶a̶u̶t̶i̶f̶u̶l̶ and s̶a̶f̶e̶ coastal casino city in New Jersey. We were 13 students living in a three bedroom apartment…
Most of my roommates were selling ice-cream, washing dishes, or working at construction, but I’ve got my first freelance contract with a Silicon Valley company, which was paying twice as much compared to dishwashing! The only problem was that our house didn’t have a reliable wi-fi. Every morning I had to walk 2 miles to the public library, work there until 6 pm, and then move over to the mall, where I could catch a free wi-fi from a cafe, and work for an extra 2 hours until my laptop battery would drain. I was writing website scrappers for some education startup in Java. It was mostly a routine job of copying & modifying the same boilerplate code, but there were also gems. Some sites were actively protecting themselves from scrapping, so we were using a sophisticated pipeline, consisted of Selenium-controlled browsers connecting via TOR, distributed over several AWS machines, and receiving parsing tasks from a retry-queue. If there’s something that job taught me, it’s a regexp skill, which I nearly perfected.

My stuff over my bed right before leaving Atlantic City

After returning from the USA trip, I’ve teamed up with my university friend Andrew, and we started working on freelance contracts together. We were working from his home, and it was taking most of our time so that almost nothing was left to actually studying at the university. We started from small PHP contracts but quickly switched to Python and single page web applications written in various javascript frameworks. Over time I gravitated towards the backend, and Andrew became a pure frontend developer. By the last year of study, we were deep into freelance work, and we had to choose what are we going to do after graduation: get a “normal” (regular) job, continue freelancing as is, or scale up by hiring more people. Needless to say, we’ve chosen the latter. That’s how the next chapter of my engineering, and now entrepreneurial career began — an outsourcing company Upsilon IT.

My desk at the first Upsilon IT office

Upsilon had a pretty rough start: we didn’t have enough experience for the jobs we were taking, we didn’t know anything about hiring, and couldn’t hire people we needed, we didn’t know how to deal with customers. We had to overcompensate with immense amounts of work and resourcefulness. A few times we were running into situations when every client delayed payment, and on a payday, we had 0 on our bank account, so we had to borrow money from relatives to pay out salaries. We survived, everything stabilized eventually, and now Upsilon IT is a happy, ~50 people company, offering all sorts of web engineering.
Nothing has taught me as much as Upsilon yet. Besides the engineering skills, it showed me how to deal with the real world stuff, not fake challenges from the university or competitions. I’ve learned how to communicate with people, how to understand what they actually want (and need), how to convey thoughts, how to hire, how to fire. University wasn’t teaching any of these.

Outsourcing was of course interesting and well paying, but we always wanted something bigger — our own product.

Oslo, during the trip to the client

In 2014 I participated in the US diversity lottery, and suddenly won a green card. We had a lot of discussion with my wife, but the conclusion was that if we go — we go to the Silicon Valley, to learn how the real IT industry works, and how people build real stuff.

We moved to the USA in spring 2015. I wanted to try working for a startup as a full-time employee, so I sold my half of Upsilon IT to Andrew, as I wasn’t helping the company anymore. After temporarily settling in Santa Clara I began my job hunt. Big companies never attracted me, so I was never seriously considering them, though I tried my luck with a few. I wanted to observe things from a close distance, and my real goal was a “late early” stage startup with a hundred people or so.

I started going through interviews, and quickly realized that it wasn’t what I expected! I thought that they would consist mostly of conversations about my experience, but people were asking me algorithms! It’s somehow assumed here that by asking a person RMQ and LCA, you are testing for problem-solving skills. But I haven’t done that for years! After failing first few interviews, I spent two or three weeks just brushing up what I was doing back in high school. That quickly paid off — whiteboard interviews became a breeze, I’ve passed an on-site with Google, but even before I knew the result, I’ve already accepted an offer from ThoughtSpot — a prominent BI startup from Palo Alto. I knew nothing about BI, but the engineering interview was so in-depth, and people were so smart, that I was eager to start working with them immediately.

An after-interview post card signed by the ThoughtSpot engineering team

Next 2.5 years I spent in ThoughtSpot. For the first time in my life, I was touching “big engineering.” These people wrote a database from scratch and were shipping their own appliance, and I… I’ve never seen a server unit before. A transition from an employer to an employee was also pretty unusual. I now had a boss, or even two, and was receiving, not distributing tasks. Eventually, I fit in, and the next two and a half years were the most significant boost of my engineering skill. I learned about in-memory databases, highly parallel computations, distributed systems, high availability, enterprise products, etc., etc. I became proficient with Docker and Kubernetes, and even wrote a few articles about them. Visited an OSDI conference, and learned Go programming. ThoughtSpot has recently become a unicorn, but I left it almost a year ago to embark on my own journey again.

OneBar team in the Minsk office

As I mentioned before, Andrew and I always wanted to build a real software product that would be serving real people’s needs. I always considered my move to the Silicon Valley as a learning trip, not a career destination, and a year ago I started to feel that there’s enough learning — it’s time for action! We picked an area where we had the most experience — communication in large distributed teams. Communication and knowledge sharing is the essence of any company productivity, and yet it wasn’t right at any project, we had to deal with before. We’ve assembled a four people team (of me, Andrew, and two more Upsilon guys), tried out one idea, which didn’t quite work, and right now working on the second one, which we feel has a much higher potential. I’m on my own again, and everything feels new and exciting. I have a lot of enthusiasm for our new project, and I’m again learning!

Recently I had to temporarily return to ThoughtSpot as a part-time contractor so that I can support my life here in Silicon Valley, but I’m still dedicating most of my time to the project. I’m picking up lots of new skills, which I would never need, had a been a regular software engineer: design, marketing, talking on the phone (!), writing, presenting, telling stories, and many more. Even though it doesn’t pay me back in money (yet), I’m already considering the whole idea a success, as it’s all essentially a way way better learning experience than any top university.

With that, I’m going to conclude my story for now, and go back to working on OneBar. Looking forward to writing the next article about all the learnings we’ve gained in the process of building it!

I encourage you, the brave reader, who’ve reached to the bottom of this article, to go and check out what we’re building here, and consider signing up for a beta if your team actively uses Slack.

Thank you!
Good luck, and peace!

Links

Another reason why your Docker containers may be slow

Kubernetes for dev infrastructure

A Knowledge Base in your Slack

More by Maxim Leonovich

Topics of interest

More Related Stories