Skip to content

Martin Konicek

Synthace

Martin is a software engineer based in London. He currently works at a biotech startup called Synthace. Previously he was on the core React Native team at Facebook.

Inteview image for Martin Konicek

What led you to become a developer?

When I was 15, the only profession that came to my mind was "graphic designer". As a kid, I loved drawing on a piece of paper. Later my mum bought us a PC, and I started creating "visual art" in Corel.

But then something unexpected happened. My high school in the Czech Republic had a compulsory programming class. We learned the basics of Pascal. After a few lessons, I was convinced programming was by far the most interesting subject at school. I remember thinking "This is easier and much more fun than math!" I was excited.

I started building games. In my free time, I would be skateboarding and playing Starcraft with friends, drawing in Corel, or building games in Pascal. It was around 2002 and we didn't have an internet connection at home. I learned Pascal from my good friend and classmate Martin Čech. Every day at school we would tell each other about some useful language features we discovered (like a switch statement). The only graphics API we knew about was put a pixel on the screen, so I built an image editor that would store images in a custom format on disk. I then used the image editor to create graphics for a simple turn-based strategy game (inspired by Jagged Alliance). I learned about networking much later and used that to build a 2D multiplayer shooter.

Around the age of 17, I realised my visual art was not outstanding compared to the works I discovered on DeviantArt, but I was doing well at programming. There were some competitions in algorithms for high school students and I did OK in those (competed at the national level).

Therefore I decided I would study computer science. It was one of the most obvious and easiest decisions in my life. I felt very lucky because many people find it difficult to choose a career at that age.

Here are some screenshots from a couple of projects from that time:

This was about the tenth game I made, and the first game I released publicly. It was called Total Racing.

I started a 3D game to learn about DirectX, matrices, etc. Didn’t finish.

What’s your setup and development environment?

I grew up using Windows. When I moved to Berlin and started my first full-time job, I switched to Mac.

I go with whatever IDE does the job. For Android development, I used Android Studio. Later I used Sublime and then Atom for most things. Now I'm using VSCode.

What’s your favorite stack to work with?

My favourite stack to work with is React and TypeScript.

React is not only my favourite technology right now, but in my opinion, the most productive, most fun to use, and best-designed UI library ever created.

Over the years, I have built apps using Delphi, PHP, ASP.NET, Windows Forms, WPF, the Android framework and React. I like React by far the most. It's simple, powerful and easy to learn.

Regarding platforms, I like the web a lot, but unfortunately, it has poor user experience on mobile. Native apps are necessary for good UX and full access to the platform.

However, when it comes to developer experience and release process, iOS and Android are not as good as they could be. Therefore I think frameworks like React Native and Flutter are important - they bridge the gap to provide the best of both worlds.

I have done my share of backend development, mainly in Scala and Java. I like Scala and it's a fun language to learn, however, the compile times tend to be long. Waiting for the compiler is no fun.

A year ago I worked as a contractor on a project to rewrite a CPU-bound backend service from Ruby to Rust. I used Rust only for two months and didn't learn it properly but enjoyed using it. The IDE support was good. Compile times weren’t amazing though.

I am a big fan of static typing. I think types make code more robust because the type checker finds many small bugs that would otherwise happen at runtime. Types also serve as a form of documentation, making it easier for me to understand code written by other people as well as myself. At the same time, I strongly believe programmers should never sit in front of a computer and wait for the compiler for more than a few seconds. If I can have a fast iteration, I am much more productive. I'd rather get good work done in seven hours than spend nine hours being distracted checking Twitter while waiting for the compiler. This is why I think projects like TypeScript or MyPy are the most exciting development in programming languages in a very long time.

What are your top 5 go-to repos?

React
React Native
TypeScript
Flutter
Keras

What technologies are you most excited about now?

I am excited about the potential of TypeScript, React, React Native, Flutter and Rust.

I am blown away by the progress in deep learning and the power of frameworks like TensorFlow, and the relative ease of use of Keras. I did an online course called deeplearning.ai and the biggest takeaway was how easy it was to throw together a machine learning model from some famous research paper, literally in a few lines of code. And the accuracy of those models was not mind-blowing but pretty good, even on relatively small data sets used in the online course. Trained from scratch, it would recognise the face of a known person with 95% accuracy or so. Given more data and training time, these machine learning models can perform some truly incredible tasks.

What does your ideal workflow look like, from messing around to production?

Figure out what needs to be done, split this into milestones and focus on the most important pieces first. Divide the work into large independent chunks that can be done by different people.

Each person should have a large enough project they own. Owning a project means making decisions, identifying dependencies, driving discussions, setting deadlines, and presenting results. The engineer can split the project into tasks in a task tracking system if they want to.

Then just stay focused and keep shipping™ :) Pick the single most impactful task every day and work on it, and have fun.

Regarding shipping to production, it's good to ship as early as possible, get feedback from users, watch metrics, and iterate.

What are you currently learning?

At work, I'm learning Typescript. Outside of work I recently finished a great course on deep learning called deeplearning.ai. I like learning about things I know very little about because that way I learn the most. It took me a while to finish the class because I did it in my free time. I don't usually code outside of work. I do sports on the weekends (snowboarding, wakeboarding, kitesurfing, and gym).

Rather than working on hobby projects outside of work, I find it much more efficient to convince someone to let me learn on the job and get paid for it. My first summer job/internship was in C# (I only knew Pascal at the time). My first full-time job was in Scala and JavaScript, and my interviewers were happy when I showed some knowledge of Java, algorithms, and a desire to learn. I think this makes sense - people can learn a programming language on the job.

Last year, I tried applying for jobs in data science but this was more difficult of a switch to make - most companies were looking for people with experience, ideally a PhD in machine learning. In the end, I'm happy I stayed in product development though. There's a reason I've been building products and frameworks all my life - I enjoy it.

I read hacker news and check Twitter almost every day, and sometimes read programming-related blogs. On the weekends I would love to go offline as much as possible, but don’t always manage. Going out for a long day of sports helps.

I like reading books. Some of the books I liked recently were Sapiens, 21 Lessons for the 21st Century, The Hard Thing About Hard Things, Elon Musk, Innovators, Masters of Doom, The Martian and The Kite Runner.

What project are you most proud of?

I am proud of the work we are doing at Synthace. The software helps biologists develop new drugs including cancer treatments. About half the people at the company have a PhD in biology. The scientists are smart and it is great to work with them. Our software engineers also learn about university-level biology as a side effect.

From my past projects, the one most important in terms of impact is definitely React Native. It makes it possible for people with JavaScript experience to build mobile apps quickly. I am glad to have been part of this project with a group of amazing people. Here’s how I joined the team. I was at Facebook London and looking to switch teams at exactly the right time - when it was decided we’d build a mobile team to work on React Native in London (the engineers who started the project were at the HQ in Menlo Park). I’d never used React before and when I tried building a simple screen in React Native at the beginning of 2015, I was sold.

I loved both React and React Native the day I first tried them. I helped open-source React Native for Android in September 2015 and later worked on internal open source tooling (Facebook has really good internal tools), supporting the community, etc. This was challenging because the adoption was very high (a good problem to have) so it was difficult for the small team to keep up with the number of incoming pull requests and supporting internal teams at Facebook at the same time.

I was happy to see some great engineers from the community step into important roles, such as managing the release process and contributing very important features. When the small team that built React Native went to conferences like React Conf or React Europe in 2016 and we saw people give really good talks about React Native, I was blown away.

The next project I’d like to mention is the Google Summer of Code in 2009 and 2010. I worked on the debugger that's part of SharpDevelop IDE, and later refactoring tools.

Object graph visualizer in the SharpDevelop debugger

Refactoring tools in the SharpDevelop IDE

SharpDevelop is a free alternative to Visual Studio. At the time it had about 2000 downloads a day. I was a student and really wanted to get accepted into the Google Summer of Code program. There were many candidates applying to Google Summer of Code and I had to convince my mentor David Srbecky that I was the right candidate for the job. I worked non-stop to build a prototype for my project. When David selected me, I was extremely excited and nervous.

I knew this was a huge opportunity. Before Google Summer of Code, I was 23 and had very little professional experience (mostly CRUD applications). This was an IDE with 700 thousand lines of code, and my work would get downloaded 2000 times a day by people around the world! It was an honor to be on that team. To this day, the SharpDevelop codebase is still one of the best-designed ones I have seen. My blog from that time is still online.

What are beginner developers not learning that is critical in this day and age?

I would say code quality, such as the importance of naming and refactoring. Many universities don’t focus much on writing maintainable code. This skill will definitely help you progress faster in your career. There are books about this, for example, Code Complete.

Next, I would say algorithms and data structures, the Big O notation, and spending at least some time learning a low-level language like C to understand how things work under the hood. I’ve only written C during my studies but it was a great experience. If I started with a higher-level language like Python or JavaScript, I would try implementing some of the library functions from scratch. While knowing “clean code” is very desirable, knowing algorithms and data structures is a must, really. I sometimes see people on Twitter say “I don’t need this” but on every job I find myself traversing a tree using recursion, or deciding when to use a sorted map vs some other data structure. In my current project, I needed to build and traverse a directed graph.

The good thing about the skills above is they transfer to any programming language. You’ll still be using those skills 10, 15 years from now. These skills are harder to learn than React but they are a much better investment.

When it comes to learning, in my experience the most impactful thing you can do is work closely with a great mentor. I tend to gravitate towards companies and teams that have great engineers I can learn from. Find the best engineer at the company and find a way to be on their team. If there are no great engineers to learn from, don’t join the company. When I lived in Berlin, I learned every day from Roman Borschel, who is enthusiastic about functional programming, elegant architecture and scalability. At Facebook, I was lucky to have worked closely with Christopher Chedeau for a few months, where every day was a lesson in managing open source projects, moving fast and getting things done.

What tech challenges are you facing at your company?

Building software to help scientists automate research is a pretty unique challenge. There are questions around “What should we build next and why?” I like this kind of brainstorming a lot.

Regarding technology, we have a custom programming language (slightly modified Go for now) in which scientists build reusable elements. In biology, a lot of experiments can be described in terms of data flow diagrams, except instead of data we’re passing around some physical substance, like a string of DNA floating in a bit of water. Each box in the diagram is called an element, and the whole diagram is called a workflow.

There’s a visual editor built in React where scientists build these workflows. This is quite an interesting bit of UI engineering. Another bit, which I’m working on right now, is a visual debugger for what happens on the robot once you run the workflow. We cannot just run the workflow on the robot and see what happens because it would take five hours to finish, and some of the liquids are expensive.

Therefore, it is crucial to be able to simulate the lab robot and show you a preview of what’s going to happen. Both the simulator and the graphical debugger for the simulator are interesting technical challenges. The architecture of the simulator is a bit like a compiler. We produce high-level commands, which then get expanded into low-level instructions (similar to a how a context-free grammar works), and then we do some optimizations on the instructions in order to decrease the total duration of the experiment.

What music do you listen to whilst developing?

Anything you want to promote or plug?

I have a blog where I write about anything that comes to mind. For example:

If you like that kind of content, JavaScript, React, and other technologies I get excited about, follow me on Twitter.

If you’re interested in something totally unrelated to work, I occasionally upload videos of board sports to YouTube. These hobbies are challenging because when trying something new and daunting, you have to overcome the natural instinct that tells you “don’t do it” until you succeed. This makes those hobbies super rewarding and fun.

Interview image for Stefan Judis
Stefan Judis

Twilio

Stefan started programming 8 years ago and quickly fell in love with web performance, new technologies, and accessibility. He is also a curator of the web performance online resource Perf Tooling, organizer of the Accessibility Club Conference, contributes to a variety of open-source projects and enjoys sharing nerdy discoveries.

Interview image for Jesse Jorgenson
Jesse Jorgenson

Evernote

Jesse Jorgenson is an engineer at Evernote that focuses on front-end engineering, rich text editing, front-end dev-ops, and Node.js. He has a degree in mathematics from James Madison University and a background in music. He lives in Austin, TX and primarily lives off of breakfast tacos.

Interview image for Ram N
Ram N

Facebook

He works for Facebook on React Native. He loves working with developer tools and frameworks. Before Facebook, he was at Microsoft, working on CodePush, VSCode editor for React Native and Cordova, and App Center.

Be the first to read new interviews just like this one with Tim Benniks. from top developers.