Coffer
August 17, 2026

Let’s Get Dirty with Some Epistemological Mapping

A philosopher robot draws a four-quadrant map on a chalkboard labeled Know, Teach, Pretty Sure, and Don’t Know, beside a glowing Eloquent model diagram.

There is a title!

Before I started working in software development, I was fixated on philosophy. My interest in philosophy began in its most primitive form in high school, when I was exposed to apologetics, but it was not until I started my undergraduate studies that I took my first true philosophy class.

Introduction to philosophy courses are among the most important classes students can take outside their disciplines. Even a brief introduction can expose you to concepts that reshape the way you approach ethics, being, learning, and knowledge.

Speaking of knowledge, let’s talk about epistemological mapping.

Epistemological mapping is the practice of conceptualizing knowledge through some type of visualization for the purpose of clarifying a topic, identifying authoritative foundations, establishing plausibility structures, and revealing shortcomings or hidden biases.

Put simply, a good knowledge map will help you understand what you know, why you know it, what knowing it means, and what you don’t know about it.

Epistemic maps can help you not only know about a topic or category but also understand why and how you know what you know… you know?

If you want to become a more confident developer while building resilience against impostor syndrome, you need to get good at developing epistemic maps.

I have developed a simplified, four-domain approach to mapping development concepts that is easy to remember and incorporate into your personal study. If you use these four domains to organize your thoughts, you will become better informed, have an easier time teaching others, and grow more confident in your knowledge.

The four domains are:

  • What do I know?
  • What can I teach?
  • What am I pretty sure about?
  • What do I know I don’t know?

Let’s put these into practice and see how we might develop a map of one of Laravel’s often-overlooked but important methods: isDirty().

I chose it for academic reasons. That’s all.

What Do I Know?

This domain should always be your starting point.

Organize your thoughts in whatever way works best for your mind, whether that means bullet points, single-word thought bubbles, or long paragraphs. The main point of this domain is to begin by developing a clear picture of what you know.

And don’t worry—at this point—about being right.

It is actually helpful to include something in your “Know” domain if you currently believe it to be true. Discovering later that your understanding was limited or wrong will benefit your epistemic map because it may reveal other assumptions or misunderstandings.

Mapping isDirty()

isDirty() is a method available on Laravel Eloquent models. Eloquent models maintain both their current attributes and a copy of their original attributes. Laravel compares these values to determine whether an attribute has changed.

When a model is retrieved from the database, its current and original attributes match, so it is clean. If one of its attributes is changed, that attribute—and therefore the model—is dirty. Once the model is saved, its current state becomes its original state, and the model is no longer dirty.

What Can I Teach?

I find this to be the best domain to pursue next.

This is where knowledge and confidence start to separate. Look at the previous domain and determine what you can expound upon, but only allow statements into this domain when you are confident they are true.

Now, in reality, you could still be wrong, and that’s fine. No one knows a topic perfectly. However, you should have some skin in the game on these points. I will sometimes ask myself, “Would I bet $100 that I am right?”

Mapping isDirty()

isDirty() is particularly useful before a model is saved, including within an observer’s saving or updating methods. An observer listens for Eloquent model events such as created, updated, deleted, and restored.

You can pass a specific attribute—or an array of attributes—to isDirty() to determine whether any of those values have changed.

if ($user->isDirty('email')) {
    // The email attribute has changed but has not yet been saved.
}

After the model has been saved, isDirty() will return false because the original attributes have been synchronized with the model’s current state. At that point, you can use wasChanged() to determine whether an attribute changed during the most recent save.

What Am I Pretty Sure About?

This domain is where your assertions should begin to split according to their level of confidence. The great thing about this domain is that you can speculate with the total freedom to be wrong. Include random thoughts, details you think you heard somewhere, and ideas you know you wouldn’t be able to defend in the slightest.

The strength of this domain is twofold.

First, it establishes weaker areas in your overall knowledge that you can tighten up later, hopefully moving them into the first or second domain.

Second, identifying knowledge in this area helps you properly represent your understanding of the topic as a whole.

Remember, the goal of understanding a topic is not to possess absolute knowledge. Often, knowing what you know—and knowing what you don’t—offers a commanding authority on the subject.

Mapping isDirty()

I think isDirty() comes from somewhere inside the Eloquent model’s attribute-handling system, but I am not actually sure how the sausage is made on that one.

I am also pretty sure that if an attribute was previously null and then changed to another value, it would still be considered dirty.

I think observers are triggered by model operations such as saving, updating, or deleting unless you use something like saveQuietly(). I am less certain about what happens when one model is saved because of an update to another model. I think you could chain observers together that way, but that sounds awful.

What Do I Know I Don’t Know?

And now we have arrived at the most important domain for growth and confidence. The reality is that you can never know what you don’t know you don’t know. However, there are times when you recognize clear gaps in your knowledge.

After mapping the third domain, you may discover questions that can help populate this one. The aim of this domain—besides developing academic humility—should be to define a direction for further exploration and mastery of the topic.

This is also the time to be brutally honest, even if it makes you feel dumb.

Use being dumb as a superpower. Being dumb is the first step toward becoming slightly less dumb.

- That feels like a quote. I don’t know—Socrates. Why not?

Mapping isDirty()

I don’t know how observers actually work under the hood.

I use them frequently, and I know that if I manually change an entry in the database, the observer does not activate. But does every Eloquent model have an interception point for observers? Is it part of the save() method?

And how do PHP attributes actually work with something like this? #[ObservedBy([UserObserver::class])] What is that actually doing?

Laravel is great when it just works—but why does it just work?

Map Complete

And there you have it. You now have a well-formed mental—or epistemic—map of a topic.

Take a look at it. Review it.

Does it look the way you assumed it would when you started the exercise? Is one domain a bit skinnier than you wanted it to be, or are you impressed by how much you are already willing to teach?

The main aim of the exercise is to take stock of where you are at this moment. Once you have done that, the map can provide a clear roadmap for the areas you want to strengthen and expand in the future. You can try to move more items from domain three into domain two or check off items in domain four. Better still, expand domain four. Identify more aspects of the topic that you don’t understand at all. Use this exercise periodically, and you may find that your next blog entry, TikTok video—are they videos? I am so old—or conference talk comes more easily and with greater confidence.

Back to blog