Documentation is underrated

documentation is underrated - codewithjiyo

In the tech world, documentation is often overlooked. Programming gets all the attention. New features and bug fixes are what everyone values most. To users, that’s where the benefit is. For developers, it’s a chance to show off their skills

Writing documentation, on the other hand, is seen as boring. It’s usually pushed to the next sprint. Managers also struggle to justify giving story points for it, since they assume it should already be included.

We often hear, “Working software over documentation” from the Agile Manifesto. But that doesn’t mean documentation is worthless. In fact, it’s just as important as the code itself.

Personally, I believe documentation, refactoring, testing, estimation, and communication all matter. They deserve equal weight, not less. Working software is great, but it’s only one part of the bigger picture.

How Important Documentation is?

Since I joined the team, I’ve always been the “Frontend Guy.” But last week, I had to step up and help a colleague with the backend. To do that, I first needed to set up my local development environment.

It wasn’t easy. It actually took me four days to get everything running. That’s when I realized how important documentation really is.

Now imagine a team of 20 developers. If each one spends four days setting up, that’s a huge amount of wasted time. Yes, we focus on building features and fixing bugs, but wouldn’t it be better if someone also took time to write proper documentation?

If just one out of 20 developers created it, the effort would be small but the impact would be massive. Many may think it’s better to keep coding, but that only helps individually. Documentation helps everyone.

I believe a great developer doesn’t just focus on their own tasks. A great developer creates value that scales across the entire team. That’s the kind of impact we should aim for.

But before we start adding a documentation and reaping the benefits of having it, it also wise to be aware of the challenges when creating it and also the best spot of possible application of the documentation

Challenges in Documentation

Here are some pitfalls you should be aware of when creating documentation.

Overfamiliarity

The first thing I did to set up my local dev environment was clone the repository. What I really wished it had was a proper README file. Yes, there was one—but it felt incomplete.

Overfamiliarity happens when you’re so used to something that you stop noticing the details. In documentation, this means the writer may skip steps because they seem “too obvious.” The result is unreliable instructions. You follow the steps, but eventually get stuck. This causes delays, extra back-and-forth questions, and sometimes you’re left to figure things out on your own

Overfamiliarity can also affect reviews. If you ask a colleague who’s already familiar with the same process, they might miss the same gaps you did. For a better review, assign it to someone less familiar. For example, a UI/UX designer could ask for feedback from a non-designer, a DevOps engineer from a developer, or a developer from a tester.

Most of all, the valuable feedback is usually derived from someone new to the team or from an outsider with a fresh perspective. They will spot the missing details that everyone else takes for granted.

Context Loss

This happened to me before. A few years ago, I was working with Angular, Jenkins, AWS EC2, S3, Docker, Bash scripts, server-side scripts, and databases. But when I joined a new team, my focus shifted to React. After a while, all those things I once knew weren’t as clear anymore. I even forgot some best practices I used to apply without thinking.

I realized the same thing happens with business rules or tools. You might understand them well at first, but as time goes by, you start to lose the context. The details fade, and what used to feel natural becomes harder to remember.

That’s why I learned to document things as I go. If you delay, you lose too much context, and writing it later feels harder and less accurate. It’s also more costly in terms of time and effort compared to capturing it right away.

I’ve seen it in coding too. When you pause a feature for days and return to it in the next sprint, you lose track of your own thinking. Overfamiliarity creates gaps, but delaying documentation wipes out the context completely.

Inaccessible

Even flawless documentation is worthless if it’s buried in deep folders, known only to its author. Documentation should be shared, not hidden. Don’t expect developers to stumble upon it—everyone’s busy delivering. If it isn’t shared, someone might end up writing the same thing again or reinventing what already exists.

Outdated

Let’s say someone created it and along the way the process was changed and never made it back to the original documentation. This makes the documentation unreliable.

That’s why it’s important to allocate time for updating it and ofcourse the person responsible for updating it. Without those two it will lead to outdated documentation.

Consider the time spent on the documentation vs the time that it can save for speeding things up because you don’t need to do it from scratch

What are the things to Document?

When I joined the new team these are the things I looking for:

Roles

Working together gets messy when no one’s really sure who’s in charge of what. You hesitate to ask for help because you’re not even sure if it’s their job. Things slip through the cracks, people miss steps, and no one knows how to back each other up. Without clear roles, accountability disappears—everyone just does whatever they think is needed, which usually means double work and stepping on toes

Priorities and Issue Types

Everyone comes from different backgrounds—what looks like an improvement to one person might be a bug to someone else. One might call it urgent, while another thinks it’s minor. Without alignment, these clashes keep happening. Picture this: your boss expects that task done right away, but in your eyes, it’s not even a priority. And no one likes being pulled off their work mid-task just because someone else suddenly labeled it as urgent.

Git Branching Strategy

Different teams use Git in different ways. Some prefer merging, others rebase. Some like making lots of small commits, while others prefer bundling everything into one. Some even avoid cherry-picking altogether.

When it comes to branching, there are a few common strategies out there:

  • Git Flow
  • GitHub Flow
  • GitLab Flow
  • Trunk-Based Development

Of course, your team might even have its own custom approach.

What really matters is that your team agrees on a clear Git branching strategy and a consistent way of working with Git

Local Development Setup

The very first piece of documentation devs need when contributing—whether it’s a new feature, bug fix, or improvement—is a guide to getting the project running locally.

Without it, everything slows down. New features get delayed, productivity drops, and peer testing suffers if someone can’t even run the project on their machine. People end up working in silos, each setting things up their own way, which leads to inconsistencies. Over time, the setup becomes fragile—every new change risks breaking something, and you waste time fixing the same issues again and again

System Architecture

This type of documentation usually comes in the form of a diagram—it shows the bigger picture of how different parts of the system connect and interact.

It makes onboarding faster since new devs (or external contributors) don’t have to guess how things work.

It also helps identify dependencies, so you know which modules rely on each other and avoid accidentally breaking things.

And most importantly, it supports confident decision-making. Whether you’re scaling, adding features, or refactoring, you can clearly see the impact before writing a single line of code.

Folder Structure

This kind of documentation tells you exactly where files should go. For example, in a frontend framework, you’ll know where to place components, hooks, utilities, models, constants, enums, data, config, and so on.

It provides a standard way of organizing files. Without it, everyone dumps files wherever they want—making them harder to find, slowing down development, and sometimes causing duplicate work when someone unknowingly rebuilds something that already exists.

On the backend, the same applies. If the team needs to migrate to a new API version or database design, having no standard folder structure makes the process painful. It’s harder to spot inconsistencies, and the risk of introducing bugs goes way up.

Development Process

This documentation lays out the different phases involved in delivering a solution. For example, if your team uses Agile Scrum, you can record what needs to happen in each phase and sub-phase—who’s responsible, when it should be done, how often, and what the deliverables and timelines are.

Some of these phases might include:

  • Sprint Planning
    • Backlog Review
    • Breakout Sessions
    • Async Planning Poker
    • Sync Planning Poker
  • Sprint Development
    • Daily Standups
    • Sprint Check-Ins
  • Sprint Release
  • Sprint Review
  • Sprint Retrospective

The real value? So you don’t have to sit around next month wondering what to do—you already have a framework in place. That way, the team stays aligned, expectations are clear, and you can focus on what matters most: building and delivering quality solutions

Product Requirement Document

This documentation captures who’s involved and their roles, the schedule for when each phase starts and ends, the objectives for the sprint, and the list of requirements prioritized to achieve those objectives. It also notes dependencies between requirements and any assumptions made along the way.

Think of it as a contract for the team: leads know what to expect from each member, developers know what to build, testers know what to check, analysts know which requirements to gather, and designers know what to design

Checklist

I remember our lead used to announce what to do every week in our Slack channel, so I suggested creating a checklist instead. It not only reduced his workload but also gave us clarity on what needed to be done.

From there, we expanded it into checklists for planning and release—what to cover during Sprint Planning and what to handle during Sprint Release.

That simple step helped our team become more self-organizing

Style Guide

Have you ever used an app where every page feels different?

  • The colors don’t match.
  • Buttons and menus aren’t in the same spot.
  • Alerts and warnings sound like they were written by different people.
  • Even the spacing and sizing seem inconsistent.

That’s exactly the kind of problem a style guide solves.

A style guide ensures consistency across the entire app, no matter who’s working on a feature. It also makes onboarding new team members easier—no need to reinvent the wheel every time.

Here are the key things your style guide should cover:

  • Color Palette
  • Iconography
  • Typography
  • Logos
  • Layout, Margin, and Spacing
  • Breakpoints
  • Content and Tone
  • UI Components

Feature List

A feature list isn’t just a table of features—it’s a powerful tracking and prioritization tool. Each feature is listed with a priority, making it much easier to decide what to work on next and ensuring nothing slips through the cracks.

The real value of a feature list shines when you deal with cross-cutting tasks. For example:

  • Adding Role-Based Access Control (RBAC)? Just add a column and instantly see which features already support it.
  • Want to ensure Postman API tests exist? Add a column and track coverage at a glance.
  • Planning a refactor? Add another column and know exactly which features are done and which still need work.

Because features are prioritized, you avoid wasting time on low-value work and reduce the risk of overlooking something important.

A feature list can also help you:

  • Map UI features to API endpoints, so you can safely clean up unused code.
  • Track API versions per feature, making upgrades more controlled and less risky.

The possibilities are endless—but the outcome is the same: faster tracking, smarter prioritization, and a clearer picture of your system.

Business Rules

This type of document truly shines when it comes to tracking conditions, rules, defaults, and possible values. It acts as a single source of truth, making sure everyone understands exactly how a feature is supposed to behave.

Think about the kinds of questions that often come up during development or testing:

  • When displaying records in a table or list, what criteria should they meet before appearing?
  • For buttons, when should they be enabled or disabled? Do users need to select one item, or can they select multiple?
  • When a button is clicked, where does it redirect—Page A, Page B, or somewhere else?
  • If a checkbox is ticked, what actions should be triggered automatically?
  • For input fields, what’s the acceptable range of values (minimums, maximums)?
  • What are the default values across the system?
  • When is a file supposed to download?
  • How should a new record be created—as a fresh entry or by overwriting an existing one?
  • What’s the naming convention for exports or system-generated data?
  • Should certain columns in a table be hidden based on conditions?
  • For a given status, what conditions make it applicable?
  • Which options are valid and allowable for users?
  • What data points should be excluded from a graph?
  • And when you perform X, what should automatically happen in response?

Without a document like this, teams often waste time asking the same questions back and forth. Worse, if the original developer is no longer around—or if too much time has passed—it’s easy to forget the intended behavior of a feature.

Having this documentation means:

  • Clearer understanding of business rules
  • Faster troubleshooting when something breaks
  • Less reliance on memory or unavailable team members
  • Consistency across the entire system

In short, it’s not just documentation—it’s a guardrail that saves time, reduces confusion, and keeps features working as intended.

Swimlane Diagram

If a system architecture diagram shows the different components of an application, a swimlane diagram goes a step further. It illustrates how those components interact—each one represented as a lane—and maps out the sequence of steps when a feature is triggered, showing what happens, where it happens, and in what order.

For example, let’s say someone buys a product on an e-commerce platform. The swimlane diagram might look like this:

🛒 Swimlane Example: Buying a Product on an E-Commerce Platform
UI (Web/App)

1. Customer browses catalog and selects a product.

2. ClicksBuy Now”.

3. Enters shipping address and payment details.

4. Submits the order form.

5. Displays loading state while waiting for API response.

6. ShowsOrder Confirmedpage once the process succeeds.

API Layer

7. Receives purchase request from UI.

8. Calls AWS Cognito to verify authentication and authorization.

9. Validates request data (e.g., product ID, quantity, payment details).

10. Calls Database to check inventory availability.

11. If validpasses request to AWS Lambda for business logic execution.

12. Returns response to UI (success or error).

AWS Cognito (Authentication)

13. Confirms customers identity (token/session validation).

14. Checks if the user has valid permissions to purchase.

15. Sends authentication result back to API Layer.

Database (DB)

16. Checks if the requested product is in stock.

17. Reserves inventory (decreases stock count).

18. Creates a new order record with status =Pending Payment”.

19. Logs transaction details for auditing.

20. Updates order status once payment is confirmed.

AWS Lambda (Business Logic)

21. Processes order confirmation logic.

22. Calls payment gateway service for transaction.

23. If payment succeedsupdates DB order status toConfirmed”.

24. Triggers notification service (sends confirmation email/SMS).

25. Sends event to analytics/monitoring system.

26. Notifies shipping service to start fulfillment.

Data Flow Diagram

A system architecture diagram shows the different components of an application, while a data flow diagram (DFD) illustrates how data moves in and out of each process within the system.

With a DFD, you can quickly grasp how everything works end to end. It helps you:

  • Design solutions with a clearer picture of dependencies.
  • Debug issues faster by tracing the flow of data.
  • Identify potential blockers early in the process.

In short, a DFD makes your system not just easier to understand, but also easier to maintain, design, and troubleshoot.

Entity Relationship Diagram

This diagram is made up of entities, attributes, and relationships. It helps you understand how different entities connect—for example, how many courses a student can enroll in. It also defines the attributes of each entity and their unique identifiers.

By having this information upfront, you avoid building features that don’t match the intended design. You also ensure the correct identifiers are used and gain a clear understanding of what each attribute represents.

Capabilities and Assignments

Think of this document as a capability map in table form. It has three simple columns:

  • The capability
  • The primary point person
  • The secondary point person

The benefit? Whenever you have a question about a specific capability, you instantly know who to reach out to—and if the primary person isn’t available, there’s always a backup. No more guesswork, no more chasing the wrong people.

Production Deployment

When it comes to production deployment, relying on just one person—like your DevOps engineer—is a big risk. What happens if they leave the team or are simply unavailable? A feature might be ready, or a critical bug may need fixing, but without that knowledge, your team is stuck.

That’s why documenting your deployment process is so important. A clear, step-by-step guide ensures that anyone on the team can step in with confidence. It prevents delays, reduces errors, and eliminates the single point of failure that slows teams down when knowledge is siloed.

In short, deployment shouldn’t depend on one person. With proper documentation, your team gains resilience, speed, and confidence—so production updates keep flowing smoothly, no matter what.

Database Backup and Restoration

When it comes to database backup and restoration, the question isn’t if you’ll need it—it’s when. Hardware failures, accidental deletions, or corrupted data can happen anytime, and without a clear process, recovery becomes chaotic and risky.

That’s why having a standard, well-documented process for both backing up and restoring your database is critical. It ensures backups are reliable, restorations are safe, and no one has to guess what steps to follow during an emergency.

With this in place, your team gains confidence and control. Even if the unexpected happens, you’ll know the data can be recovered quickly and safely—without compromising integrity or wasting time.

Troubleshooting Guide

This guide helps the Triage team quickly check and troubleshoot issues reported by users before passing them on to developers.

It lets them work on their own without needing to wait for developers, who are usually busy with sprint tasks.

The best part is they can handle issues asynchronously, so there’s no waiting around. Plus, it keeps developers from getting distracted by problems that aren’t real bugs or already have simple workarounds

code with jiyo logo

Subscribe to Newsletter

Get my latest blog posts—packed with lessons I’ve learned along the way that have helped me become a faster, smarter web developer.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top