Karim's Blog and Other Ramblings

Recent

Navigating People

People are complicated. Like, really complicated. Predicting the weather next year is straightforward compared to predicting what a person will think, do or say in the next 10 minutes. Like the weather, there are We worry about hurting people’s feelings and we don’t want to look stupid. I’m guessing that’s pretty normal. The degree to which we worry is where things get weird. We could not say anything So how do we navigate people while maintaining my sanity? Well, it would be misleading ...

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

Navigating People

People are complicated. Like, really complicated. Predicting the weather next year is straightforward compared to predicting what a person will think, do or say in the next 10 minutes. Like the weather, there are We worry about hurting people’s feelings and we don’t want to look stupid. I’m guessing that’s pretty normal. The degree to which we worry is where things get weird. We could not say anything So how do we navigate people while maintaining my sanity? Well, it would be misleading ...

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...