Latest Posts (20 found)
Dominik Weber 4 days ago

Thoughts on using synthetic users for product development

## TLDR LLMs can provide information about how specific user groups behaved in the past. Combining a product idea with that can sharpen the understanding of how the product may help the user. It can give feature ideas on how to make the product more complete for the user, and help with understanding which features are not as important. Best for development of MVPs, but can also be useful for existing products. --- Synthetic users are AI-generated personas. They can be asked questions and respond with an approximation of what a real user would say. They come from the UX research space, but while reading [this article](https://www.nngroup.com/articles/synthetic-users/) I had the idea that they may be used for product research and development. The strength of LLMs are their knowledge and ease of interaction. They encode the knowledge of the world, and can be easily chatted with. This means I can give it a persona (e.g. engineering manager in a software company) and tell it to answer questions as this person would. LLMs have a tendency to revert to the mean, to be average. That tendency actually helps here, because I get the typical behavior of that persona. When talking to people I'd have to talk to quite many to get that kind of understanding. On the flipside, LLMs are incapable of giving specific responses (e.g. engineering manager with a 4-person team at Google). So, lets say I have an idea for a product, and a rough idea about who may be interested in it. I can then create a synthetic user (AI persona) about their typical day, their tasks, workflows, and so on. I can find out how an average person does things, and may even ask for multiple ways to achieve the same goal. This is purely information gathering, which LLMs are good at. Based on that information I can judge how the product can help and which features may be useful. Then I can go further into these areas. Get more details about the specific tasks the product may help with. Using that process I can define (a minimal version of) a product or feature that is more grounded in reality than without. The key is to stay clear of any kind of value judgments and future predictions. Don't ask it if a task is annoying, how important it is, how much time it takes, or how the feature and product would change the behavior or workflow. This is where LLMs are even worse than humans. The core message of the book "The mom test" is to ask users about their behavior, what they did in the past. To never ask users to predict how they would behave. This is even more critical with LLMs. They will tell you what you want to hear, but by staying factual, by asking how user groups behave, they may have value. The use-case I'm thinking of for this type of interaction is a software engineer having a product idea. Maybe a side project, maybe something that should become a business. In any case, they want others to use the product. Often they would not do any user research before starting development. By using LLMs it's possible to get information quickly which may help to refine the idea before writing the first line of code. Note: It goes without saying that contact with real people, either through interviews or selling the product, is at some point necessary to verify if the information holds true. But that's a much higher investment which is not warranted every time time before starting development.

0 views
Dominik Weber 1 months ago

Rules for creating good-looking user interfaces, from a developer

Creating good-looking user interfaces has always been a struggle for me. If you're in the same camp, this might help. I recently redesigned [Lighthouse](https://lighthouseapp. io/), and during that process built a system that helped me create much better designs than I ever did before. This system is about achieving the best possible design with the least amount of effort

1 views
Dominik Weber 7 months ago

An approach for automated fact checking

A short while ago I took part in a hackathon from the Wiener Zeitung, where the theme was to tackle problems in the media space. Since I’m working on an RSS feed reader myself, I have a lot of ideas, but not the time to work on them. This hackathon was the perfect opportunity to validate if the fact-checking system I thought of some time ago could work. The result was better than expected.

2 views
Dominik Weber 9 months ago

Self-hosting HyperDX for fun and profit

HyperDX is a relatively new, but complete, product in the observability space. It supports logs, spans, session replay, dashboards, alerts, and everything else necessary for a complete observability solution. I compared its features to a list of other solutions and HyperDX came out on top.

1 views
Dominik Weber 9 months ago

AsyncLocalStorage and how to use it to reduce repetition of log data

AsyncLocalStorage is a Node.js class that makes it possible to store global data for one specific function execution. It doesn’t matter if the function is synchronous or asynchronous, but in practice it’s more relevant for async functions.

0 views
Dominik Weber 10 months ago

Type-safe logging with custom string interpolation

In an effort to improve observability of Lighthouse, I updated the logging infrastructure and switched from console.log to pino. That led me down the rabbit hole of typing the logging functions. I wanted to create a function that takes a message string and data object, where the message string can reference values in the data object, and TypeScript verifies that all referenced values are in the data object.

1 views
Dominik Weber 10 months ago

On log levels

Logs are an important part of observability. When something went wrong, logs help with the investigation and understanding of what happened. One of the most common problems is inconsistent use of log levels. If that’s the case, filtering by log level is almost useless and logs become hard to read. Defining and documenting log levels helps maintain consistency

0 views
Dominik Weber 10 months ago

Monorepo setup with TypeScript, Tailwind, NextJs, and WXT (browser extension development) with shared components

The most-requested feature for Lighthouse is a browser extension to add articles to the library. Lighthouse has always been a monorepo to share code between the NextJs application and a couple of Lambda functions. Since there was only one application that used UI components, they were always part of the NextJs codebase. To avoid code duplication with the browser extension, the UI components had to move to a separate package.

0 views
Dominik Weber 1 years ago

When to choose the freemium pricing model as solo founder

Pricing is a difficult topic, especially for first-time SaaS founders who don't have experience in that area. One common question is whether the product should have a free plan. I have read many articles on that topic, and received a lot of contradictory advice. Often it's just a "it worked for me so it'll work for you" kinda thing

0 views
Dominik Weber 1 years ago

Pivoting to a well-defined product category

I'm a solopreneur and working on my first serious product. It's called Lighthouse, and combines the features of an RSS feed reader, newsletter reader, and read-it-later app. The problem that I want to address is that when people subscribe to many blogs, newsletters, YouTube channels, and various other sources, the volume of content quickly becomes overwhelming

0 views
Dominik Weber 1 years ago

Product naming trends over time

It took me months to settle on the name Lighthouse for the product I'm working on, which combines the functionality of an RSS feed reader, a newsletter reader, and a read-it-later app, to fight content overload. Some people excel at naming their products. I'm not one of them. I experimented a lot with different strategies

0 views
Dominik Weber 1 years ago

About risk taking in life and job

When speaking with individuals in the finance community who aim to maximize their wealth, the most common strategy I encounter regarding property investment is to buy as much as you can reasonably afford. If you have enough cash to buy one flat outright, you could alternatively buy three flats by taking a mortgage

0 views
Dominik Weber 1 years ago

What I want to achieve with Lighthouse

I've been learning from articles, blog posts, and newsletters since I was in school. They're not my only source of knowledge, but they are great to stay up to date, get practical knowledge from people who've done it, expose myself to new ideas, and much more. Over the years I've gone through a couple different tools. Initially, I opened everything in a new tab

0 views
Dominik Weber 1 years ago

Think of dopamine as finite resource to spend on activities

We usually think of dopamine as a feel-good chemical we get from specific activities, without considering that dopamine production has limits. What if we reversed our thinking to dopamine-first, that it's a finite resource we can spend on activities. Dopamine is known as the motivation and reward chemical in the brain

0 views
Dominik Weber 1 years ago

Reading articles and newsletters reduces blind spots

Reading articles, blog posts, and newsletters is such an enjoyable activity for me because it reduces blind spots without needing a lot of cognitive effort. Finding out about a novel approach that I can use in my work, or a tool that gives me new capabilities, is exciting. I get to see what else is out there without expending much mental energy

0 views
Dominik Weber 1 years ago

Startups and marketing

When I heard marketing professionals giving advice, it never fully made sense to me. Until a couple days ago, when it finally clicked. An important distinction is the state of the company. As an indie developer I was looking at marketing from the point of view of a new product (getting first users), and marketers work through the lens of established businesses

0 views
Dominik Weber 1 years ago

Refactoring an entire NextJs application to server components

Next.js 13 introduced the app directory and React Server Components. On Star Wars day (May 4th) a couple months later, React Server Components was marked as stable. Server components separate page rendering, with some parts rendered on the server and others on the client. The key difference is that server components are always rendered on the server, not prerendered on the server and hydrated on the client. Server-side rendering existed before, but now for the first time it’s possible to mix it with client-side rendering on the same page.

1 views
Dominik Weber 3 years ago

Vertical tabs in Visual Studio Code

I love vertical tabs. I use them wherever possible. Mostly in my browser (Firefox) and the IDEs I use. For years I tried to have the same in VS Code too, but couldn't find a way. And now, finally, I found one. It's actually quite easy. First make sure that `View->Appearance->Show secondary side bar` is checked. . [](. /1. png) Then drag `Open Editors` to the secondary sidebar. . [](. /2

0 views
Dominik Weber 6 years ago

List of Built-In Helper Types in TypeScript

TypeScript has a few very useful helper types predefined, which aren’t known widely enough. Here’s a list of them with examples and explanations how they work for the more complex ones. These helper types are either conditional or mapped types. To get an understanding how they work in general, check out my other blogpost Mapped Types in TypeScript.

1 views