We sat down with Peter Levi, a Software Engineer out of our Sofia office, to discuss why he joined Hyperscience five [!!] years ago, the projects he’s currently working on, and what he finds most exciting and rewarding about working at Hyperscience.
Why did you join Hyperscience?
Chance! Five years ago, Hyperscience was a very early start-up veiled in mystery. My first impression was “are these guys even real?!” — even the website was mysterious and very geeky. But I met extremely smart engineers in my interviews, which dissolved all my doubts. Back then Hyperscience was one of the few companies in Sofia actively working on actual cutting-edge Machine Learning [ML] projects, which was incredibly enticing. Five years later, that still holds, and we are fortunate to have top engineers and ML minds working on our team.
What does your role entail, and what teams do you work closely with?
My role has been quite diverse. My “official” title right now is Staff Software Engineer, and I also have some Engineering Manager responsibilities.
I consider myself a universal developer and like to have a good grasp of all technology tiers. And in my five years here, Hyperscience has been such a dynamic company that I had the chance to put on all types of hats in order to help where help was most needed. I have led projects, worked directly with customers, worked on some of our early Machine Learning solutions, led our Frontend team and a couple of UX-heavy projects with React. Recently, I have mostly been working on our Django-based backend.
I often work with Product in order to resolve the huge amount of ambiguity we deal with. Our product is a complex mix of non-trivial ML parts, coupled with human-in-the-loop parts that require a fast and smooth UX. So, projects often benefit from someone with a more cross-functional experience to help come up with the right balance between these two diverse aspects of it.
I also work with our designers when defining our UIs, help with ideas there, and come up with designs myself from time to time.
And, of course, I work closely with all the other engineering teams in the company – application, ML, Devops, QA.
What are some interesting problems you have worked on in Hyperscience?
There have been many. I recently joined the team that builds the “core” of our product, the central piece that allows both ourselves and customers to model business processes as a series of automatic (ML-backed) or human-backed steps, and then orchestrates their execution.
Before this, I worked on the team that deals with the way layouts are defined in our system. To briefly explain what this means – our product helps companies process their incoming documents. Most often these are filled-in predefined forms – you can think of an insurance claim or an account opening form as an example. Before we can process these, customers need to specify how they look, which fields to extract, the data types and so on.
It’s a hairy problem once you dig into the details. There is editing similar to that in image-editing software, versioning like in a version control system such as git, import, export and more. The defined fields need to be compatible with the ML backend that will process them, and which also evolves, and so on. Our UX needs to support the complex use cases of customers who have hundreds of document types, yet also be convenient for simpler use cases, smaller organizations and sales demos.
Some customers don’t even know all the forms they have out there. To help with this, I worked on the so-called “Find Potential Layouts” feature, one of the few examples where we use unsupervised learning in the system. The goal here is to automatically find layouts that the customer has missed to define, but for which they get submissions. For example these could be sufficiently different variants of forms they already have in the system.
Another small project I love to brag about is the one with which I won the last internal hackathon we had. Imagine you have a form with, say, 50 same-looking checkboxes on it that you want to define as fields. How do you define them without having to draw more or less the same rectangle 50 times? I implemented an easy solution for this that’s now part of our product and that, again, was the right mixture of Computer Vision and UX.
And then, there were a myriad of interesting projects that passed through my hands in the earlier years of Hyperscience.
What technologies are you working with and what do you personally find most exciting?
Our tech stack is fairly mainstream and well-established, but also sufficiently current and modern. We use Python, Django and Django REST Framework on the backend. Data is stored in one of several supported relational databases. We’ve even made several contributions to Django to improve its support for Oracle and MSSQL. The UI is in the form of a single-page web application, and is built with React and TypeScript. The backend and background jobs run in Docker containers, on-premise within our clients’ existing infrastructure. For the ML models, we use both TensorFlow and Torch.
But the technology stack is just a means. To me, the most exciting aspect of my work is the variety of challenging problems that we have to solve, the ambiguity around some of those problems, the healthy debates and heated discussions we have as we seek the right balance between what needs to be done, what ideally we would love to do and what we actually have time to do. Also, the harder the battle, the sweeter the victory!
What advice do you have for individuals looking to join the Hyperscience team?
Engineers are often so engrossed in details that they cannot see the forest for the trees. Be aware of this and avoid it. Always keep the big picture in mind, the long goals. Be brave to suggest shortcuts or alternatives that could save work and time towards those bigger goals, or could lead to a better final solution. Another related principle that I think is super important – first make it work, then make it better. And this applies both to approaching a complex new feature, and approaching a difficult coding task. Also, you should not fear ambiguity – it gives you freedom to come up with better solutions.
What 3 adjectives would you use to describe the culture at Hyperscience?
Dynamic, ambitious, results-oriented.
What is your productivity hack?
I don’t think I have one. There are no easy cheat codes when you are faced with a hard problem, sometimes you just have to sit and force your will through those.
What is a fun fact about you?
I have been accepted into the Architecture University in Sofia twice… I come from a Maths school (competitions, etc.) and for some time I was certain I would become an architect. First time, right after school, I passed the exams but decided to study Computer Science instead. I was the first ever to not enroll in Architecture when accepted and the guy who enrolled in my place subsequently got the nickname “The Bingo”… Second time was about a decade later when I had some disappointments related to engineering and was considering a change. I attended lectures for about 1-2 months before deciding I actually love my profession.
But I can probably still draw some of the Greek capitals by memory (like this one), those were part of the exam. Also it is no surprise why design and UX interest me, there are touching points with architecture, and it seems I am generally a visual guy.
Overall I am happy I didn’t go through with architecture, as with software it is a lot more often that you see your new creation become a “real thing”, albeit in a more ephemeral way. Also the barrier for creating something is virtually non-existent – have an idea, go create a repo and you could have something out there by the end of the day. I myself created and enjoy working on a couple of applications (for Linux) that grew into somewhat popular open-source projects, check my github profile.