Documentation only survives if it lives as close to the code as possible. Good documentation isn’t a single artifact - it’s a small ecosystem of layers, each serving a different purpose.Documentation only survives if it lives as close to the code as possible. Good documentation isn’t a single artifact - it’s a small ecosystem of layers, each serving a different purpose.

If Your Documentation Takes Two Clicks to Open, Congrats - It’s Already Outdated

2025/12/07 01:00

\ Over the years, I’ve worked on all kinds of projects—big, small, chaotic, overengineered, “temporary,” allegedly well-structured, and everything in between. And yet one pattern has been hilariously consistent:

The documentation is always missing, outdated, or buried in some forgotten corner of Confluence guarded by a 2019 timestamp.

\ Every project claims to have documentation.

\ Every team promises they’ll keep it updated.

\ And every developer confidently says, “Don’t worry, I’ll write it later,” which, as we all know, is the documentation equivalent of saying “the cheque is in the mail.”

\ After watching this cycle repeat itself more times than I’d like to admit, I realized something simple but brutally true:

\ And from that, another realization came - the main problem with outdated documentation is the fact that most teams don’t consider it as part of the main development cycle, leaving it for later or making due with a couple of pre-dev specs they already had somewhere in Confluence.

\ To write meaningful documentation, let’s first discuss what type of documentation there is for a software component:

Ways to Document Code (That Developers Might Actually Use)

Once you accept that documentation has to live close to the code, the next question is how to structure it.

\ In practice, I’ve found that good documentation isn’t a single artifact - it’s a small ecosystem of layers, each serving a different purpose and audience.

\ For that project I mentioned (written in Java + Spring Boot), we identified four main types of docs:

1. Client Specs

These are conventional documents usually compiled by a domain expert. Ideally, they’re rich with ubiquitous language and provide code-agnostic descriptions of business cases - in other words, everything an engineer needs to truly understand the problem at hand.

\ Unfortunately, in reality, these documents often end up stored somewhere in Confluence, shared with the team at the beginning of a project, and then almost never updated again.

\ Don’t get me wrong: these documents are important.

\ Extracting knowledge from domain experts should be a top priority for any engineering team. But specs evolve, deadlines stress everyone, and those original documents slowly but surely become an outdated foundation.

\ The knowledge of changing requirements, edge cases, and project pivots ends up living in the code - or worse! - in the heads of senior developers.

\ To address this, we stopped writing specs in random Word files or Confluence pages destined to be forgotten and moved them as close to the front line as possible: the code repository.

\ We began storing them as Markdown (.md) files inside the repo, usually in a docs/ folder.

\ git submodule in GitHub

In large microservice environments, these documents can even justify a dedicated repository linked as a Git submodule. Submodules are often overlooked, but they’re a powerful way to keep multi-repo ecosystems organized.

\ For further reading on submodules, I highly recommend this blog post - link.

\

2. README – The Front Door for Humans

If client specs are the encyclopedia, the README is the front door. And yet, it’s one of the most overlooked pieces of documentation in software projects.

\ Ironically, almost every version-control platform - GitHub, GitLab, Bitbucket - automatically renders the README right on the main project page. It’s the very first thing any developer sees when landing in the repository. Despite this, READMEs are often shockingly empty, painfully outdated, or filled with the dreaded “TODO: write documentation later,” which of course never happens.

\ A good README is not optional. It’s the single document most likely to actually be read because it requires zero clicks. And because it sits at the root of the repo, developers are more likely to update it while working on the code. It’s documentation that lives in the path of least resistance.

\ A well-written README should answer the most important questions a developer has within the first few minutes of encountering a project:

  • What does this service/project/component do? - a concise purpose and context statement - no marketing fluff.
  • How do I run it locally? - runtime instructions, environment variables, dependency setup, and any project-specific commands.
  • How do I test it? - unit tests, integration tests, test data setup, and any test-related tooling.
  • How is the project structured? - a short explanation of the directory layout, key modules, and where to find the important parts of the code.
  • How do I deploy it? Deployment scripts, CI/CD notes, required permissions, or platform nuances.
  • Where can I read further? - links to generated docs, architecture notes, API references, and centralised design documents.

\ The README is the gateway into the project. It sets expectations, reduces onboarding time, and gives every engineer—new or experienced—a clear orientation point. When maintained properly, it becomes the most valuable single document in the entire repository.

3. JavaDocs – Docs That The Compiler Annoys You Into Maintaining

JavaDocs - usually invisible, often forgotten, but absolutely essential when something breaks.

\ In practice, documenting Java projects often falls into two extremes: either over-commenting every trivial line, or no comments at all because “the code is self-documenting.” The truth, as always, is somewhere in the middle.

\ For our project, we made a conscious decision to document only what was genuinely necessary. That meant:

  • using ubiquitous language so that domain terms matched exactly what was in the business specs
  • explaining the why behind non-obvious decisions, not the what the code already reveals
  • documenting core domain classes, interfaces, and complex workflows
  • avoiding comment walls that simply repeat the method name in verbose form

\ JavaDocs, when used properly, serve as the micro-level documentation that clarifies intent without cluttering the code. And unlike Confluence pages, JavaDocs come with a built-in advantage:

  • The compiler actually complains when they get out of sync.

\ If you rename a parameter but forget the JavaDoc tag, the build reminds you.

\ If you delete a method but leave stale comment references, the IDE lights up like a Christmas tree.

\ This gentle friction is exactly why JavaDocs tend to remain more accurate than other forms of documentation - they’re annoying to neglect.

\ To keep everything centralised and avoid “documentation islands,” we also used Doxygen.

\ Doxygen in action

Doxygen is a widely used documentation generator tool in software development. While primarily used in the C++ community, we used it to aggregate the JavaDocs into a consistent, browsable reference - an HTML page. It has a number of features that JavaDoc does not offer, e.g., the class diagrams for the hierarchies and the cooperation context, more summary pages, and many more.

\ This gave us a clean, unified view of the entire codebase without relying on scattered IDE hints.

4. Clean Code – The Documentation You Don’t Need to Maintain

Finally, the most underrated form of documentation is also the one developers respect the least until they really need it: clean code.

\ Comments age. Specs drift. READMEs get ignored. JavaDocs can become stale.

\ But well-written code—clear, intentional, and expressive—is documentation.

\ As Uncle Bob famously put it, “Clean code reads like well-written prose.”

\ And in practice, that means:

  • classes and methods with names that reveal their purpose
  • functions that do one thing and do it well
  • domain terminology used consistently throughout
  • no cleverness for its own sake
  • no “surprise behaviors” hidden inside side effects
  • no unnecessarily deep abstractions that require a PhD to understand

\ Clean code is the one artifact guaranteed to survive refactors, sprints, staff turnover, and organizational chaos. It’s always in sync with the behavior of the system because—it is the behavior of the system.

\ A simple rule emerged for us over time: If you need a paragraph of comments to explain a method, the real problem is the method.

\ When the code is expressive, everything else becomes easier → JavaDocs become lighter and more focused → the README shrinks because onboarding becomes obvious → specs become clearer because the domain model mirrors the business vocabulary.

\ Clean code doesn’t eliminate the need for documentation; it anchors it.

\ It ensures that all other forms of documentation—specs, READMEs, JavaDocs—are reinforcing the truth instead of compensating for unclear implementation.

\ In the end, clean code is the documentation that demands no maintenance, no CI integration, and no tooling. It’s the most honest, reliable explanation of what the system actually does.

Bringing It All Together — A Living Documentation Pipeline

After refining how we wrote documentation, the final step was to ensure it wasn’t just created—but continuously delivered and always accessible. For that, we built a documentation pipeline that turned our specs, README files, and JavaDocs into a single, unified living documentation portal.

\ Since we wanted our docs to live as close as possible to our code, we decided to deploy everything through GitHub Pages, which gave us an effortless, version-controlled hosting solution directly tied to the codebase. Github Pages is not particular to Github (GitLab, for example, also has GitLab pages) - it is another neat feature of the popular version control systems I recommend for further reading - link.

\ To compile everything into a set of cohesive pages, we used Sphinx.

\ Sphinx is a powerful documentation generator written in Python. It takes source files written in reStructuredText or Markdown and translates them into various output formats, including HTML, PDF, and ePub.

\ Sphinx handled the structure, navigation, and theming. Doxygen fed Sphinx with auto-generated JavaDocs using the Breathe plugin, giving us a fully browsable API reference straight from the source code. Meanwhile, the root README served as the immediate entry point for developers exploring the repository, linking seamlessly into the generated documentation site.

\ Every merge into main triggered a CI job that rebuilt the docs, ensuring the portal reflected the latest code changes, API updates, and design decisions. Nothing lived in isolation. Nothing required manual syncing. And crucially—nothing was more than a single click away.

\ This turned our documentation from a static artifact into a continuously updated ecosystem that developers actually used, because it was integrated directly into their daily workflow and lived right alongside the code.

Conclusion — Documentation Is Our Responsibility, Not Our Burden

At the end of the day, writing documentation isn’t optional. It’s part of our job as engineering professionals. Future teammates depend on it. Onboarding depends on it. Maintenance, reliability, and even architectural clarity depend on it. But accepting that responsibility doesn’t mean documentation has to be painful.

\ By keeping docs close to the code, automating whatever can be automated, and relying on smart tools like Markdown, JavaDocs, Doxygen, and Sphinx, we remove the friction that normally kills documentation efforts. We turn something that traditionally feels like a chore into a natural extension of everyday development. And when we pair that with clean code, good READMEs, and domain-rich specs, the entire ecosystem becomes self-sustaining.

\ Documentation doesn’t need to be perfect—it just needs to be accessible, accurate, and alive. When we build systems that encourage developers to update docs as easily as they write code, everyone benefits: the team, the product, and most importantly, the poor soul who inherits the project six months later.

\ Good documentation doesn’t make us less lazy. It just makes being lazy compatible with building great software.

Disclaimer: The articles reposted on this site are sourced from public platforms and are provided for informational purposes only. They do not necessarily reflect the views of MEXC. All rights remain with the original authors. If you believe any content infringes on third-party rights, please contact service@support.mexc.com for removal. MEXC makes no guarantees regarding the accuracy, completeness, or timeliness of the content and is not responsible for any actions taken based on the information provided. The content does not constitute financial, legal, or other professional advice, nor should it be considered a recommendation or endorsement by MEXC.

You May Also Like

Soluna Holdings Announces $32 Million Equity Offering

Soluna Holdings Announces $32 Million Equity Offering

The post Soluna Holdings Announces $32 Million Equity Offering appeared on BitcoinEthereumNews.com. Key Points: Soluna Holdings initiates $32 million offering for Bitcoin and AI projects. Funds targeted at expanding Bitcoin mining infrastructure. Soluna positions itself at the intersection of renewable energy and computing power. Soluna Holdings announced a $32 million registered direct offering, involving the issuance of 18,079,144 shares and Series C warrants at $1.77 each, as per Nasdaq regulations. This funding supports Bitcoin mining and AI infrastructure, potentially impacting related markets by expanding Soluna’s renewable energy-driven computing capacity. Equity Offering Fuels Bitcoin and AI Growth Soluna Holdings has entered into definitive agreements to issue 18,079,144 shares and Series C warrants at $1.77 per share. The $32 million raised will be directed at enhancing Bitcoin mining capabilities and advancing artificial intelligence initiatives, emphasizing Soluna’s strategic positioning in green energy sectors. “We strategically co-locate our data centers with renewable power sources to support Bitcoin mining, generative AI, and other compute-intensive applications.” – Soluna Press Release Bitcoin Market Faces Volatility Amid Funding News Did you know? Soluna’s funding strategy mirrors trends seen in other data-center companies supporting cryptos and AI, highlighting a shift towards sustainable tech infrastructure. Bitcoin (BTC) currently trades at $89,257.47 with a market cap of approximately $1.78 trillion. Recent declines include a -2.79% drop over the past 24 hours, according to CoinMarketCap. Bitcoin(BTC), daily chart, screenshot on CoinMarketCap at 00:01 UTC on December 7, 2025. Source: CoinMarketCap Insights from the Coincu research team suggest that Soluna’s strategy may catalyze further investments in technology that thrives on renewable energy, reinforcing its practical application in cryptocurrency and AI sectors. DISCLAIMER: The information on this website is provided as general market commentary and does not constitute investment advice. We encourage you to do your own research before investing. Source: https://coincu.com/bitcoin/soluna-holdings-raises-32-million/
Share
BitcoinEthereumNews2025/12/07 08:08
3 Paradoxes of Altcoin Season in September

3 Paradoxes of Altcoin Season in September

The post 3 Paradoxes of Altcoin Season in September appeared on BitcoinEthereumNews.com. Analyses and data indicate that the crypto market is experiencing its most active altcoin season since early 2025, with many altcoins outperforming Bitcoin. However, behind this excitement lies a paradox. Most retail investors remain uneasy as their portfolios show little to no profit. This article outlines the main reasons behind this situation. Altcoin Market Cap Rises but Dominance Shrinks Sponsored TradingView data shows that the TOTAL3 market cap (excluding BTC and ETH) reached a new high of over $1.1 trillion in September. Yet the share of OTHERS (excluding the top 10) has declined since 2022, now standing at just 8%. OTHERS Dominance And TOTAL3 Capitalization. Source: TradingView. In past cycles, such as 2017 and 2021, TOTAL3 and OTHERS.D rose together. That trend reflected capital flowing not only into large-cap altcoins but also into mid-cap and low-cap ones. The current divergence shows that capital is concentrated in stablecoins and a handful of top-10 altcoins such as SOL, XRP, BNB, DOG, HYPE, and LINK. Smaller altcoins receive far less liquidity, making it hard for their prices to return to levels where investors previously bought. This creates a situation where only a few win while most face losses. Retail investors also tend to diversify across many coins instead of adding size to top altcoins. That explains why many portfolios remain stagnant despite a broader market rally. Sponsored “Position sizing is everything. Many people hold 25–30 tokens at once. A 100x on a token that makes up only 1% of your portfolio won’t meaningfully change your life. It’s better to make a few high-conviction bets than to overdiversify,” analyst The DeFi Investor said. Altcoin Index Surges but Investor Sentiment Remains Cautious The Altcoin Season Index from Blockchain Center now stands at 80 points. This indicates that over 80% of the top 50 altcoins outperformed…
Share
BitcoinEthereumNews2025/09/18 01:43
The Psychology Behind Why People Stay, Leave, Or Tune Out At Work

The Psychology Behind Why People Stay, Leave, Or Tune Out At Work

The post The Psychology Behind Why People Stay, Leave, Or Tune Out At Work appeared on BitcoinEthereumNews.com. The Psychology Behind Why People Stay, Leave, Or Tune Out At Work getty Leaders spend a lot of time wondering why some employees stay loyal, why others leave quickly, and why so many slip into disengagement long before they walk out the door. People often assume the main reason employees leave is pay or promotion. Those things matter, but they only scratch the surface. The bigger explanation is based in psychology. Employees make decisions based on how they feel, what they fear, what they assume, and whether their daily experiences reinforce a sense of meaning and connection. That is the part leaders overlook. The clues are always there, but they are often hidden in everyday interactions that seem small and routine. What Does The Psychology Of Daily Work Reveal About Why People Stay? getty What Does The Psychology Of Daily Work Reveal About Why People Stay? People stay in workplaces where they feel understood. Any organization can offer flexibility or better benefits, but those are not what keep people committed long term. Employees stay when they believe their voice matters, when support feels steady instead of controlling, and when their manager shows genuine interest in how they experience the workday. Microsoft’s Satya Nadella has talked about this often. He highlights how people perform at a higher level when leaders approach conversations with a learning mindset instead of an answer mindset. That shift changes the tone of the relationship. When employees sense curiosity from leaders, it lowers defensiveness, builds trust, and strengthens commitment. Curiosity also signals interest, and interest signals value. When people feel valued, they stay. When they do not, they begin to explore other options. This is why the tone of daily interactions matters so much. A single moment where someone feels dismissed can outweigh months of positive intentions.…
Share
BitcoinEthereumNews2025/12/07 07:45