RSSAmplifier

Blog

Minko Gechev's blog

Recent content on Minko Gechev's blog

blog.mgechev.comRSS feed ↗110 posts

Latest posts

skillgrade


⭐ Find Skillgrade on GitHub 
 
 skillgrade 
 A few weeks ago I wrote about Skill Eval , a framework for testing AI agent skills. The idea resonated — skills are becoming a critical part of how teams work with agents, and without a way to measure whether they work, you’re guessing. 
 The problem was that Skill Eval required too much setup. You had to clone a repo,…

Unit Tests for AI Agent Skills


⭐ Find Skill Eval on GitHub 
 
 Unit Tests for AI Agent Skills 
 I’ve been working with AI coding agents daily - Antigravity, Gemini CLI, Claude Code, and others. One pattern I keep seeing is teams building skills for these agents: procedural instructions that teach the model how to use internal tools, follow specific workflows, or comply with team conventions. 
 The…

You Should Care About AI

In conversations with developers lately I’ve been noticing a lot of discomfort when bringing AI. Talking to people and doing self-reflection I think there are a couple of reasons for this: 
 
 Overinflation . AI is certainly over hyped by some. People have business interests in raising money or increasing the valuation of their companies and they tend to exaggerated the capabilities…

Generative Development

Historically in my blog I’ve been posting 10-20 page deep-dive explorations in type theory , deep neural networks , predictive prefetching , etc. Recently, I’ve been thinking of taking a new approach with short snippets based on my current thinking about a particular topic. 
 Today, I’ll share high-level takes on developer workflows and how they can impact the tools we use.…

LLM-first Web Framework


The opinions stated here are my own, not necessarily those of my employer.
 
 Over the past few weeks I’ve been thinking about how we can make a framework easier for AI. In particular I’ve been only focused on building user interface. When we add a backend, database, and communication protocol across the backend and the frontend, we get another set of problems that could…

Reactive framework in ~200 lines of JavaScript

One of my current projects is converging Angular and Wiz into the same framework. This is a complex projects that involves a lot of work and many people. It also got me thinking about different client-side rendering models. In this blog post I’ll show a very simple library that enables you to develop components with fine-grained reactivity. To make it easier to talk about this library, I…

Managing Angular

Over the past couple of years, I’ve been the product lead for Angular. In this article, I’d like to share how we’ve been managing the framework. Keep in mind this content lives on my personal blog for a reason - it represents my point of view and doesn’t share a complete picture of all the processes within the team, such as people management, program management, etc. Also,…

Are LLMs going to replace us?

Over the past few years, I have published most of my posts on blog.angular.dev and my blog has received little attention. Today, I decided to share something that has been on the mind lately. It’s inspired by a mixture of one of the most memorable moments from my university classes and the recent boom of AI. Through the lens of the theory of computation I’ll attempt to answer the…

Prefetching Heuristics

In this post, we’re going to focus on web performance. In particular, we’ll be discussing optimizing user experiences preemptively. When it comes down to speeding future actions up in Web UI development, we usually apply prefetching. With prefetching, we download and cache resources relying on assumptions for the user’s behavior. This way, we proactively perform a slow operation…

Design Patterns in Open Source Projects - Part II

This blog post introduces another design pattern into the context of ngrev . If you’re not yet familiar with the project, I’d strongly recommend taking 2 minutes to the introduction and “Project Overview” sections in the first part of the series. 
 
 If you did not take the time, ngrev is an Electron app that visualizes the structure of an Angular app, showing the…

Design Patterns in Open Source Projects - Part I

I see two common frustrations around design patterns: 
 
 It’s easy to memorize patterns but hard to figure out where and how to use them 
 OOP is lame, and design patterns suck 
 
 If the second bullet point resonates with you, this blog post is probably not a good use of your time. 
 Now let’s focus on the first point. It’s not easy to understand design…

What I learned doing 125 public talks - Part I

Over the past 7 years, I gave over 125+ talks for 20 countries in front of over 50,000+ people. By any means, this doesn’t make me an expert in public speaking, but I had the opportunity to learn a few things that I’d love to share. 
 I’ll spread the content between a couple of different posts covering everything from planning, preparing the talk, rehearsals, and presentation…

Dynamic imports solve all the problems, right?

Since Angular version 8, we support dynamic imports in loadChildren in the route declaration. In this article, I want to give more information about why dynamic imports could be tricky to handle from tooling perspective and why you should be careful with them. 
 
 As engineers, we often have the perception that dynamic == good . With statically typed languages, such as TypeScript, this has…

5 Angular CLI Features You Didn't Know About

I’ve been using Angular for years, not only the framework itself but the entire development platform, including the CLI. Since I joined the Angular team and started digging into the source code, however, I started noticing features in the CLI that I’ve never used before. In this blog post I want to share some of them, which will make your work life easier and more productive! 
…

Angular quicklink Preloading Strategy

A few months ago I posted an article about Guess.js . Guess.js is a powerful library for predictive prefetching of JavaScript based on analytics data for a website. The library consumes reports from an analytics source (by default Google Analytics) and builds a basic machine learning model. When a user visits the site, based on the model Guess.js prefetches resources which are likely to be needed…

Introducing Bazel Schematics for Angular CLI

In this blog post, we want to share our new schematics for Angular CLI which provide Bazel build support. You can find the implementation by Keen Liau on GitHub . With the @angular/bazel package, we want to let developers use Angular CLI with Bazel as a build tool. 
 What’s Bazel? 
 Google open sourced the software responsible for building most of our projects under the name Bazel .…

Building TypeScript Projects with Bazel

In this blog post, we’ll make a brief introduction to what Bazel is and how we can build our TypeScript projects with it. If you’re already familiar with the problems that Bazel solves, feel free to skip to the section “Building TypeScript with Bazel.” You can find the example from this blog post in my GitHub account . 
 
 Inside Google’s CI 
 Google…

Joining Google

The past five years I’ve been heavily involved in the startup space, both, here in the Silicon Valley and Bulgaria. My focus was EdTech, working on different educational products, starting with an app for kids, to a platform for online education, marketing, and sales demos which provides access to a virtual environment in the browser. In the second company called Rhyme , which is…

Playing Mortal Kombat with TensorFlow.js. Transfer learning and data augmentation


 While experimenting with enhancements of the prediction model of Guess.js , I started looking at deep learning. I’ve focused mainly on recurrent neural networks (RNNs), specifically LSTM because of their “unreasonable effectiveness” in the domain of Guess.js. In the same time, I started playing with convolutional neural networks (CNNs), which although less traditionally,…

Fast, extensible, configurable, and beautiful linter for Go

About a year ago I decided to polish my Go skills. Although the language is pretty small compared to most others that I use on a daily basis, it still has some useful syntax constructs that I didn’t use enough. What a better way to brush up your skills in a programming language other than building tools with it…for analyzing programs written in it? 
 
You can find revive on…

Introducing Guess.js - a toolkit for enabling data-driven user-experiences on the Web

About two months ago I published my initial research [1] on data-driven bundling. A few weeks after that, I had the opportunity to present my work on RenderConf in Oxford, UK in my talk “Teach Your Bundler Users’ Habits” [2] . 
 The original goal of the article was to show how data can help in improving the user-perceived page load performance by using predictive analytics…

Machine Learning-Driven Bundling. The Future of JavaScript Tooling.

In this article, I’ll introduce the early implementation of a few tools which based on techniques from the machine learning allow us to perform data-driven chunk clustering and pre-fetching for single-page applications. The purpose is to provide a zero-configuration mechanism which based on data from Google Analytics for the users’ behavior performs the most optimal build. We’re…

JavaScript Decorators for Declarative and Readable Code

Decorators in JavaScript are now in stage 2 . They allow us to alter the definition of a class, method, or a property. There are already a few neat libraries which provide decorators and make our life easier by allowing us to write more declarative code with better performance characteristics. 
 In this blog post I’ll share a few decorators which I’m using on a daily basis.…

3 Tricks For Using Redux and Immutable.js with TypeScript

In this post, I’ll show you a few tricks which can make your life using Immutable.js and Redux with TypeScript easier. All the practices are inspired by my recent work on the project Rhyme.com . 
 Immutable Statically Typed Records 
 Let’s start with the definition of our store. For the purpose I prefer to use Immutable records because of two main reasons: 
 
 Immutable…

Follow Your Dream Career with Open Source. Personal Story.

This time I’ll violate my principle to write only about purely technical topics on my blog. In the next a couple of paragraphs, I’ll talk about open source software development from a personal perspective. Here are some of the ideas that you can find below: 
 
 Explanation what open source software is. 
 The bright sides and dark corners of contributing to open source…

Redux Anti-Patterns - Part 1. State Management.

For the past year I’ve been working on a project which uses React with TypeScript and Redux. In a few blog posts I’m planning to share lessons learned while combining these technologies. In this article I’ll share a few anti-patterns related to state management that I noticed in our development process. In the second article I’ll focus on testability. 
 All of the…

Faster Angular Applications - Understanding Differs. Developing a Custom IterableDiffer

In this article we’ll take a look at another Angular abstraction - the differs and more specifically the IterableDiffer ; we’ll explain what the differs are and how the framework uses them internally. After that, we’ll take a look at how NgForOf works and design a custom data structure optimized for the directive. Finally, we’ll develop a custom differ which will speed up…

Faster Angular Applications - Part 2. Pure Pipes, Pure Functions and Memoization

In this post, we’ll focus on techniques from functional programming we can apply to improve the performance of our applications, more specifically pure pipes, memoization, and referential transparency. If you haven’t read the first part of the “Faster Angular Applications” series, I’d recommend you to take a look at it or at least get familiar with the structure of…

Faster Angular Applications - Part 1. On Push Change Detection and Immutability

On AngularConnect 2017 in London, I gave a talk called “Purely Fast.” In the presentation, I showed how step by step we can improve the performance of a business application. In the example, I incorporated as many performance issues as possible which I faced over the past a couple of years developing enterprise Angular and AngularJS applications. After the presentation, I got great…

Understanding Dynamic Scoping and TemplateRef

This post will be dedicated to template references in Angular and dynamic scoping. Although the main focus of the article will be understanding TemplateRef we will also touch semantics of programming languages by introducing the concept of scope of name binding . 
 The code samples for this article can be found in my GitHub account . 
 Introducing Template References 
 In order to…

Implementing a Simple Compiler on 25 Lines of JavaScript

I already wrote a couple of essays related to the development of programming languages that I was extremely excited about! For instance, in “ Static Code Analysis of Angular 2 and TypeScript Projects " [1] I explored the basics of the front end of the compilers, explaining the phases of lexical analysis, syntax analysis and abstract-syntax trees. 
 Recently I published “ Developing…

Developing Statically Typed Programming Language

In this blog post we’ll go through a sample implementation of a type checker, interpreter and a transpiler for a basic purely functional programming language, which is based on the lambda calculus . We will do a “full-stack” programming language development by going through formal definition of the language’s syntax, semantics and type system. After that we’ll…

WebVR for a Gamified IDE

In the first part of this blog post I discuss the idea of using virtual reality for gamification of manual tasks in the software development process. I introduce a demo project which allows source code visualization and manipulation in a generated Minecraft-like virtual reality. My initial presentation of the demo project was on ngconf 2017 , and the project’s extension I presented on…

7 Angular Tools That You Should Consider

In this article we’re going to quickly explore 7 Angular development tools which can make our everyday life easier. The purpose of the list is to not be opinionated architecture wise. This means that we’re not going to discuss tooling which has impact over our choice of application state management, data layer, etc. For instance, although packages like ngrx/store devtools , universal,…

Announcing ngrev - Reverse Engineering Tool for Angular

Have you ever been hired to work on a huge legacy Angular project with thousands of NgModules, components, directives, pipes and services? Neither do I. Angular (2 and above) is still relatively new framework and there are not many enormous projects out there. On the other hand, Angular is powerful and in combination with TypeScript we can build big, enterprise applications. 
 Exploring an…

Implementing Angular's Dependency Injection in React. Understanding Element Injectors.

Recently I’ve been blogging mostly about Angular and it’s not by accident! Angular is an amazing framework, bringing a lot of innovation to the front-end technologies, with a great community behind it. In the same time, the projects that I’m working on have various of different requirements and sometimes I need to consider different options. 
 Another great technology that…

Distributing an Angular Library - The Brief Guide

In this post I’ll quickly explain the minimum you need to know in order to publish an Angular component to npm. By the end of the post you’ll know how your module can: 
 
 Be platform independent (i.e. run in Web Workers, Universal). 
 Should be bundled and distributed. 
 Work with the Angular’s Ahead-of-Time compiler. 
 Play well with TypeScript by allowing…

Angular in Production

In this informal essay I’ll go through a case study of my experience in using Angular (2 and above) in production. 
 Last April, together with a small team, we started working on an educational application; the second version of a product that I developed about 3 years ago using Angular 1. 
 The product targets young kids and their parents. It’s purpose is to motivate kids to…

Ahead-of-Time Compilation in Angular

Recently I added Ahead-of-Time (AoT) compilation support to angular-seed and got a lot of questions about the new feature. In order to answer most of them, we will start from the beginning by explaining the following topics: 
 
 Why we need compilation in Angular? 
 What needs to be compiled? 
 How it gets compiled? 
 When the compilation takes place? Just-in-Time (JiT) vs…

2.5X Smaller Angular 2 Applications with Google Closure Compiler

In the post “ Building an Angular 2 Application for Production ” we explored how we can decrease the bundle size of a “Hello world!” application to from about 1.6M (non-minified & uncompressed) to 49K! We did this by using the following techniques: 
 
 Angular offline template compiler for generating tree-shakable code. 
 Tree-shaking of ES2015 modules with…

Using Stripe with Angular (Deprecated)

The content in this post uses deprecated APIs 
 To learn about the latest version of the Stripe APIs check out their documentation page .
 
 
 
 Stripe offer a set of APIs which allow businesses and individuals to easily accept and manage payments online. In a typical scenario you want your users to pay for a service that you’re offering using Stripe as a mediator.

Building an Angular Application for Production

Progressive Web Applications help us build native-like web apps, thanks to amazing tools such as Service Workers, IndexDB, App Shell etc. Once the browser downloads all the static assets required by our app, the active Service Worker can cache them locally. 
 This way the user may experience slowdown during the initial page load, but each next time she opens the application her experience will…

Implementing the Missing "resolve" Feature of the Angular 2 Router

For the last a couple of months I’m working on an Angular 2 based PWA . The more complex the application gets, the more I appreciate that our choice was Angular! For routing we’re using the initial Angular 2 router that is now deprecated. For sure we will migrate to the newest one once it gets stable but until then we have some problems to solve. 
 One of the features that I miss…

Scalable Single-Page Application Architecture

In order to have better understanding of the following blog post you should be familiar with the fundamentals of the object-oriented and functional programming. I also strongly encourage you to explore the redux pattern . 
 A couple of months ago I started working on the first version of a Silicon Valley-based startup. The project is a single-page application with quite dynamic business…

Managing ambient type definitions and dealing with the "Duplicate identifier" TypeScript error

Maintaining the angular-seed , I found out that the most common problem for developers using the project is: 
 Duplicate identifier 'export=' . ( 2300 ) 
 compilation error. 
 In this quick tutorial I’ll show what does this error mean and how you can fix it. In order to get better understanding of the problem we’ll discuss the differences between TypeScript and JavaScript,…

Static Code Analysis of Angular 2 and TypeScript Projects

So far, most of the blog posts I’ve written are tutorials; they explain how we can use given technologies, architectures, algorithm etc. For instance: 
 
 Flux in Depth. Store and Network Communication. 
 ViewChildren and ContentChildren in Angular 2 
 Build Your own Simplified AngularJS in 200 Lines of JavaScript 
 Remote Desktop Client with AngularJS and Yeoman 
…

Enforcing Best Practices with Static Code Analysis of Angular 2 Projects

About two weeks ago I published the initial draft of a Community-driven Angular 2 Style Guide . It was based on: 
 
 Patterns I noticed in the Angular 2 source code while contributing to the framework. 
 Suggestions by Miško Hevery during his technical review of my book “ Switching to Angular 2 ”. 
 My own development experience with Angular 2. 
 AngularJS 1.x…

ViewChildren and ContentChildren in Angular

In this article I’m going to explain the difference between the concepts of view children and content children in Angular. We will take a look at how we can pass access these two different kinds of children from their parent component. Along the content we are also going to mention what the difference between the properties providers and viewProviders of the @Component decorator is. 
…

Dynamically Configuring the Angular's Router


 Warning : This version of the Angular 2 router is now deprecated! This means that soon the used below APIs will no longer be available.
 
 A couple of months ago I wrote “Lazy Loading of Route Components in Angular 2” , where I explained how we can take advantage of the AsyncRoute s and the virtual proxy pattern in Angular 2. 
 This way we can incrementally load the…

Angular 2 Hot Loader

A couple of months ago I watched a few talks from ReactEurope . I was truly impressed by a few of them and especially by the one by Dan Abramov on redux and his hot loader . The tool he shown helps you do something similar to live-reload with one big difference. When you change the code of any of the components in your react application, the new version of the component is send to the application…