Welcome to my website!

My name is Ivan Demchenko. I am a software engineer. I use this space to share observations, insights and ideas related to my professional experience. Feel free to check out my other accounts as well.

The story of Boeing as a lesson for us all

During one of my interviews in late 2023 - ealy 2024, a person asked me: “Who cares about the language we choose or frameworks or type system… all that matters is a working product”. I wrote about it already, but I used a clumsy analogy with building a house. Recently however, the internet (or at least, the algorithms that take care of my YouTube feed) started buzzing with news about the problems at Boeing....

March 11, 2024 · 3 min

CSS-only is still very powerful

It seems to me that these days, at times of React (and similar frameworks), CSS receives less attention. However, I remember a not-so-distant past, perhaps, five years ago, when using CSS for simple UI elements was the desired approach. True, it has its limitations. But I don’t think we can discard CSS completely and rely on JavaScript driving even the most trivial elements of UI. By applying (or at least trying to apply) the CSS-first approach, we can achieve some great results without necessarily relying on JavaScript....

March 1, 2024 · 1 min

Reflection: interviews are tricky for me

It’s the beginning of 2024, layoffs happen on every corner, and I’m one of those who were affected. One thing I’ve been reminded of is that interviews are tricky for me. As controversial as it sounds, it gets even trickier when I am asked questions related to my area of interest. It’s easy if you don’t know anything about a subject - admit it, and that’s it. But when you’ve been working in the field for a few years and you know the question is related, but you can’t remember some of the details - that’s when it gets interesting....

February 7, 2024 · 3 min

Who cares about the underlying tech? Why bother?

I recently had a conversation about why I insist that JavaScript (and especially TypeScript) developers should learn from Rescript, Elm, Go, Rust, and other languages. A person asked me: “Who cares? Users don’t care what language you use to build your product. Often the business doesn’t care either! There are plenty of companies with tons of spaghetti code, and they sell their products well! So why bother?” Well, I couldn’t spontaneously say why I care....

January 21, 2024 · 6 min

Model errors as data for better user and developer experience

A great product experience is when the product works as expected in the scenario it was designed for, and communicates with users in a meaningful way. As developers, we cannot control how and where our product will be used, or the user input. But we have the tools to guard the flow from unexpected inputs. In this post, I want to give two pieces of advice for people working in the JS ecosystem on how to create better programs....

January 15, 2024 · 4 min

JavaScript is not viable any more

JavaScript is a dominant language for building web applications. I’ve been using it for a very long time. However, in my opinion, it just doesn’t cut it any more. Luckily, there are some compelling alternatives. JavaScript: A Dominant Yet Flawed Language JavaScript offers a quick and cheap solution for building web applications in the short term. However, in the long run, its design quirks and inherent flaws will work against its users....

November 9, 2023 · 4 min

TypeScript inherits all the flaws of JavaScript

Being a big proponent of TypeScript, I keep noticing that this language inherits all the flaws of JavaScript. However, it does not mean we have no choice. The problem Consider a function that turns an object representing a URL into a string: type UrlRecord = { protocol: string; host: string[]; } function urlToString(urlRecord: UrlRecord): string { const { protocol, host } = urlRecord; return `${protocol}://${host.join('.')}`; } This code snippet looks innocent and pretty solid....

October 30, 2023 · 6 min

The Freedom of Web Components or Why UI Libraries Should Embrace Framework-Agnostic Solutions

In the ever-evolving landscape of web development, the choice of tools and technologies can have a profound impact on the flexibility, scalability, and longevity of a code base. One critical decision that developers often face is whether to use a framework or embrace more framework-agnostic solutions like Web Components when building a UI library. In this post, we’ll explore why opting for Web Components can offer unparalleled advantages when it comes to ensuring flexibility and avoiding lock-in....

September 5, 2023 · 4 min
Photo by Wolfgang Rottmann on Unsplash

Common mistakes when using TypeScript

I chose the railway photo for the cover for a reason. TypeScript as a type system has many powerful and unique features. But people often do not know about them or neglect them. In this post, I want to highlight some common escape hatches that people use and why they make TypeScript feel like bloated JavaScript. More often than not, we use TypeScript as bloated JavaScript. For example, { options: Record<string, string> } I would argue that this is why people keep saying that TypeScript doesn’t add much value....

August 29, 2023 · 7 min
Photo by Cesar Carlevarino Aragon on Unsplash

The Importance of Jobs to be Done Framework in Software Development

As computer programmers, it’s easy to get carried away into the vast and interesting world of software engineering. However, we must remember that people use computers as a means to an end, they need to get their jobs done. Despite having endless possibilities of all the features we can build, it’s important to stay focused and true to the needs of our users. This is where the Jobs to be Done (JTBD) framework comes in....

May 9, 2023 · 2 min