All Notes
software-engineering— 3 notes
Exceptions Should Be Exceptional: Error Handling Best Practices
Learn when to throw exceptions in Java and Kotlin and when to avoid them. Covers exceptions for unreliable code and unrecoverable cases, return-type-based error handling, and why business logic should never use exceptions for control flow.
Just Enough Planning in Software: A Case for Lightweight Planning
A practical case for 'just enough' planning in software development. Learn when planning adds value, when it becomes waste, and how to calibrate your planning effort to what actually matters: delivering product value.
Software Engineering Is About Trade-Offs, Not Shipping Code
Why your value as a software engineer isn't how fast you ship code but your ability to understand trade-offs and risk. With AI accelerating code generation, this skill matters more than ever.
llm— 2 notes
Code Quality Checks for LLM-Generated Code: The Missing Layer
Automated code quality tools need to evolve for the age of LLM code generation. Linters catch style and complexity, but the real quality gap is in module coupling, interface design, and dependency structure. Learn what existing tools miss and what a better approach looks like.
Get Reliable LLM Results: Make It Write Scripts, Not Answers
LLMs give inconsistent, unreliable answers when asked to analyse data directly. Ask them to write a script instead for repeatable, verifiable results. Includes a concrete log-analysis example.
architecture— 2 notes
Domain-Driven Design: Defining and Enforcing Domain Invariants
A practical guide to making Domain-Driven Design work by defining domain invariants and enforcing them through code. Covers why most teams skip this step, how to design interfaces that prevent invalid states, and how to recognize when a codebase is truly following DDD.
Hexagonal Architecture for Testability: Imperative Shell, Functional Core
Stop fighting mock-heavy, brittle tests. Hexagonal Architecture separates business logic from databases and IO, and the Imperative Shell, Functional Core pattern makes that boundary explicit. Includes a concrete before-and-after example in Java.