Skip to content

Minko Gechev

Google

Minko is an engineer in the Angular team at Google. He is working on compilers, tools for static code analysis, and machine learning. Minko received awards from the President of Bulgaria for his impactful open source projects.

Inteview image for Minko Gechev

What led you to become a developer?

Around 7-8th grade in school, I was primarily interested in astronomy. Back then, my goal was to become an astrophysicist. In 9th grade, I moved to a different school where my main focus was math, programming, and geography.

We quickly learned how to convert between numerical systems with different bases, and after that, we jumped to the Pascal programming language. Back then I didn't believe mortal humans can write programs and send instructions to the computer. It was so exciting for me to be able to control what the computer does.

A little after that, it turned out there are programming competitions in web development. My high school teacher Svilen Dimitrov was the one who was helping students to prepare. He introduced me to PHP, JavaScript, and MySQL. Seeing how I can translate my ideas to functional software systems was so fascinating! I spent tens of hours working on a CMS system. Before that, I developed a platform for recording the results from observations of celestial objects.

This fascination with how you can turn your ideas into reality just by having internet and a computer made me go for software engineering major in college.

Photo of myself from a national web development competition in Bulgaria

What’s your setup and development environment?

I try to keep my setup as minimalistic as possible so it's portable across different machines.

For a lot of years, I used to code primarily in vim. Back then type systems weren't really a thing in web development so vim was providing me everything I needed. I've probably spent a couple of weeks or maybe months combined in tuning my vimrc.

For the past 2-3 years, for development, I'm mostly using VSCode because of the great support for TypeScript and Go. I'm working on a macOS with iterm2 and tmux. I still often use vim to edit code, config files, or readmes quickly.

On my mac, I'm controlling the window layout with Slate. It's a fantastic tool which you can configure with JavaScript.

My favorite theme is Nord, I'm using it everywhere - VSCode, vim, iterm2. I'm frequently using Bazel for building projects with different stacks.

Text editor and theme

What’s your favorite stack to work with?

I'm working on a lot of development tooling recently. The programming languages I use daily are TypeScript and Go. Often I write Starlark, a dialect of Python used for configuring and writing extensions for Google's build tool Bazel.

Previously, when I was working on my startup, I was primarily using TypeScript (with Angular & React), Go, and Postgres.

What are your top 5 go-to repos?

github.com/angular/angular
github.com/angular/angular-cli
github.com/guess-js/guess
github.com/mgechev/codelyzer
github.com/mgechev/revive

What technologies are you most excited about now?

I'm probably a bit biased since I'm working on Angular, but I'm really excited about what we're developing right now, both on framework and tooling side.

On the framework side, we're working on shipping Ivy. That's a new rendering and a compiler (all of this backward compatible for application developers), which will enable a lot of exciting features. For example, we're working on a technique which will let us bootstrap parts of the application incrementally after server-side rendering.

This way the user will receive only 10-30KB of JavaScript during the initial load time. Once they start interacting with given DOM element we can, on-demand, load and bootstrap the associated Angular component. This, combined with a well thought out prefetching strategy can improve users' experience dramatically for any application size.

Since we want to allow developers to ship fast Angular applications from end-to-end, we're working on an automated deployment from the CLI. This will enable best practices depending on the archetype of the users' application. Imagine, as a developer, you run 'ng deploy', and your application figures out what's the best deployment strategy for itself, consuming analytics data to provide personalized loading experience for your users.

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

For my startup we were using mostly gitflow and we were quite happy with it.

Now at Google things vary between projects. It strongly depends where we host the project. For example, the projects which are only developed internally (let's say GMail) differ from the external ones (e.g. Angular CLI).

Most of my projects use monorepos. This makes it much easier to share protocol schemas, CI configuration, and make my build incremental.

For example, by having my code in a monorepo a build tool, such as Bazel, can very effectively decide which tests to rerun on a change. It can share this knowledge between the client and the server-side of an application. For example, if I update an endpoint in my RESTful API, Bazel can run only the affected integration tests in the front-end.

What are you currently learning?

I'm focused on learning more theoretical computer science. Currently, looking at incremental computations and category theory.

I'm trying to follow what's going on in machine learning as well, especially on the intersection between ML and programming language design and tooling.

What project are you most proud of?

Probably this would be codelyzer. It provides a framework for static code analysis of Angular applications. Currently, it has over 700k weekly downloads and I believe I balanced well between the scope of the project and development time.

Before I joined Google, I worked on a tool for predictive prefetching of JavaScript called Guess.js. The Chrome team presented it on Google I/O 2018, it's hard to explain the excitement I felt while watching the lifestream.

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

A lot of developers nowadays focus a lot on learning APIs. APIs change very often and it's extremely hard to stay current. Investing in this direction can make an engineer obsolete very easily when a new, trendy technology comes out.

Math on the other side does not change that often. It's almost certain that it'll stay the way it is for our entire lifetime. IMO, investing in computer science and figuring out how to use it elegantly in practice is what will help a lot of folks in the long term.

A few introductory books that I can recommend are Algorithms by Robert Sedgewick and Kevin Wayne, Types and Programming Languages Benjamin C. Pierce, and Structure and Interpretation of Computer Programs by Gerald Jay Sussman and Hal Abelson.

What tech challenges are you facing at your company?

At Google the biggest challenge we're facing is the scale on which we need to operate. There are thousands of projects, thousands of engineers, and billions of lines of code.

To build and run CI on that scale, we have a very strict and well-designed pipeline. Almost all of our source code is in a monorepo, with well-defined dependencies between the different projects so that Bazel can figure out the dependency graph and perform the most optimal build.

There's a lot more that could be said on this topic. For further reading, I'd recommend you to look at the article "Why Google Stores Billions of Lines of Code in a Single Repository".

What music do you listen to whilst developing?

Anything you want to promote or plug?

I'd encourage folks to look at our latest improvements in the Angular CLI and give us feedback! We've been working hard to help developers ship fast applications by default and there's much more work we're planning to do in this direction.

Interview image for Thomas Ezan
Thomas Ezan

Lyft

Thomas is a French Android Engineer. For the past 4 years, he has been in Lyft’s Growth team. He is currently based in Seattle, WA.

Interview image for Clare Sudbery
Clare Sudbery

ThoughtWorks

Clare Sudbery is a lead consultant developer with ThoughtWorks. Eight years ago she returned to IT with a sigh of relief after failing to persuade teenagers that maths is fun. Since then she has embraced all things XP and is on a mission to awaken the inner geek in clever women (and men) everywhere.

Interview image for Juho Vepsalainen
Juho Vepsalainen

SurviveJS Oy

Juho is behind the SurviveJS effort. He has been active in the open-source scene since the early 2000s and participated in projects like Blender and webpack as a core team member. Juho lives in Vienna, Austria, and was chosen as the Finnish Code Ambassador of 2017 by Blue Arrow Awards and runs React/GraphQL Finland conferences.

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