• Guilds

    In a large corporate environment, the decisions that are made at the highest levels can be bewildering, seemingly inconsistent and out of touch with operations on the ground. That’s not to say they’re bad decisions, just that it can be hard to make sense of them when you don’t have access to all the factors that led to them. Trying to make sense of it is an exercise in frustration. If you have made your case for what you believe to be an ideal structure and made no headway, your next course...

  • Organic Engineering

    In the realm of engineering team organization, a one-size-fits-all approach simply doesn't suffice. Team dynamics are complex, influenced by the individuals comprising the team and the evolving nature of their work. I advocate for an approach I like to call Experience in engineering spans a spectrum, from seasoned veterans to fresh faces eager to make their mark. While experience brings valuable insights and a seasoned perspective, it can also breed complacency and a reluctance to embrace new ...

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

  • Predictability

    The topic of predictability in software engineering is one that comes up often at work. Program Increments - a tool used as part of applying agile in large teams - is arguably a tool intended to help drive some predictability in an organization. But if one purpose of Program Increments is to bring predictability to development cycles then it can only be effective if underlying systems have I will start by saying I am no expert on this subject - in fact, everything in here is based on my own ...

  • Brevity

    In the past several months I’ve seen the affect that poor communication has on the efficiency of an organization. It’s not so much that it is the source of problems but it compounds all problems dramatically. Like the relationship between a spark and a powder keg, the more problematic an organization is, the more sensitive it is to bad communication. In these situations, But what As an engineer, if I’m talking about a specific bug that needs to be fixed to a stakeholder (say, a product manag...

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

  • Small Teams Do Better

    With communication as difficult as it is, keeping your development team as small as possible yields much better outcomes for a lot of reasons. I wanted to put together a few thoughts about what the benefits are and why I think they materialize. Scalability and Flexibility Smaller teams offer more flexibility in project management, ensuring continuity and flow in the project without much disruption when changes occur. This is because the members are more acquainted with the full context of the ...

  • Ansie

    Ansie is a rich-text terminal rendering package I started this package out of frustration of not having a relatively simple way to output rich text without relying on direct terminal codes which is difficult to parse with the human eye. Yes, there is With Ansie, there are no dependencies for the library - not even chalk. It uses PEGJS to build a parser that will read an XML-based string and translate that into terminal codes. For example: This feels better to me, as a web developer than the sam...