Karim's Blog and Other Ramblings

Recent

Group Decisions

People are complicated. Really complicated. Navigating people in an environment where their motivations (and your own) are subject to a wide variety of ever-changing stimuli and thoughts makes for an exhausting experience. But if you can observe and identify what’s happening, you'll be able to rise above the chaos and find your way to a productive outcome. Meetings are where most conversations about problems that require decisions are discussed. But they are interpersonal communication puzzles ...

Cataloging Conflict

I spend a good bit of time in conflict resolution - either my own, people on my team or between groups. I’ve noticed that one of the most helpful things to do in these situations - aside from empathy, which is absolutely crucial - is understanding the type(s) of conflict being had. A lot of time is spent debating decisions. Each of these decisions has consequences but the nature of those consequences should be clearly understood to better assign value to the conflict. Technical conflict h...

Life of a Project

Projects pulsate with life. They're conceived, they grow, they mature, and eventually, they transition into a state of completion. Each stage presents its unique challenges and opportunities, necessitating distinct approaches for optimal outcomes. This essay delves into the various phases of a project, highlighting their differences and outlining strategies for effective management. Ideas are fleeting, yet some are so compelling they demand attention. In these nascent stages, the absence of cons...

Engineering, Tooling and Libraries

Using CloudFlare with Notion

With my website (which uses Notion as its CMS), I ran into a problem caused by a quirk of Notion’s API. When you upload an image to Notion and then fetch that image as part of a page payload, the image URL is an S3 bucket key that expires after an hour. Which is fine for most use cases but is problematic when pre-rendering a site - like I do for To solve the problem, I use R2 as a repository for static imagery. When I fetch an image from Notion and it is has an expiring URL, I will check to ...

Notion as a CMS

I’ve been tinkering with Notion as a CMS for the last few days and decided it checked all the boxes for a simple site like my own. Below is a high level recap of some of the keys steps. But for more detail, First of all, I chose NextJS for this because I’m familiar with it, it has a lot of options for switching between different types of rendering and React is something I’m comfortable with. But, really, this is workable in any static site generator. Notion has a very clean integration AP...

A/B Testing and Feature Flags

Let’s start by defining the difference between A/B testing and feature flagging. There is a lot of overlap between the two because the definition of both includes the simultaneous presence of two (or more) different ways of presenting a user interface and/or accomplishing a task within an application. The only real difference is the You can use Adobe Target to establish feature flags that can then dictate to an application which implementation to use. But Target’s feature set allows for a ri...

Organization, People and Planning

Group Decisions

People are complicated. Really complicated. Navigating people in an environment where their motivations (and your own) are subject to a wide variety of ever-changing stimuli and thoughts makes for an exhausting experience. But if you can observe and identify what’s happening, you'll be able to rise above the chaos and find your way to a productive outcome. Meetings are where most conversations about problems that require decisions are discussed. But they are interpersonal communication puzzles ...

Cataloging Conflict

I spend a good bit of time in conflict resolution - either my own, people on my team or between groups. I’ve noticed that one of the most helpful things to do in these situations - aside from empathy, which is absolutely crucial - is understanding the type(s) of conflict being had. A lot of time is spent debating decisions. Each of these decisions has consequences but the nature of those consequences should be clearly understood to better assign value to the conflict. Technical conflict h...

Life of a Project

Projects pulsate with life. They're conceived, they grow, they mature, and eventually, they transition into a state of completion. Each stage presents its unique challenges and opportunities, necessitating distinct approaches for optimal outcomes. This essay delves into the various phases of a project, highlighting their differences and outlining strategies for effective management. Ideas are fleeting, yet some are so compelling they demand attention. In these nascent stages, the absence of cons...