# Formula Dog

> Editorial content from Formula Dog (formula.dog). Articles, comparisons, reviews, landings and tools — multi-locale, written for human readers and machine-readable for AI agents.

## Articles

### What Is Trunk-Based Development? The Git Strategy Explained

URL: https://formula.dog/journal/what-is-trunk-based-development

> All developers push to main daily. Trunk-based development trades branch complexity for shipping speed -- here is the full picture in plain language.

What is trunk based development? Every developer on the team commits code to a single shared branch called the trunk -- usually named main -- at least once a day. No long-lived feature branches. No hotfix-v2-backup-final sitting around for three weeks. Short branches live for hours, merge fast, and get deleted. The codebase stays continuously releasable. [Google runs 35,000 developers this way](https://trunkbaseddevelopment.com/). Here is how it works, when it makes sense, and when it does not.

## The "report_v2_FINAL_use_this_one.xlsx" problem -- but for code

If you have ever opened a shared folder and found `report_v1.xlsx`, `report_v2_FINAL.xlsx`, and `report_USE_THIS_ONE_greg_edits.xlsx` sitting side by side, you already understand the pain trunk-based development is trying to solve.

That exact situation happens in codebases when teams use long-lived feature branches. Someone starts a feature in week one. The rest of the team keeps shipping. By week three, that branch is dozens of commits behind main. Merging it becomes a weekend project nobody wants to own. Conflicts pile up. The developer who wrote the code has forgotten why half of it exists. This is "merge hell."

Gitflow -- the most widely taught alternative -- tries to solve this with formal structure: separate branches for features, releases, and hotfixes, each with a defined lifespan. The structure looks clean on paper. In practice, branches accumulate like spreadsheet versions in a shared drive, and integration day turns into integration week.

Trunk-based development takes the opposite stance: stop accumulating integration debt. Commit to main. Today.

## Everyone commits to main. Every day. That is the whole model.

The core rule is straightforward: all developers push changes to the shared trunk at least once every 24 hours. No exceptions for "I am not done yet" -- you commit what you have, and you make sure what you have does not break the build.

This sounds alarming until you understand the mechanisms that make it safe:

- 
**Short-lived branches**: You can still use branches, but they live for hours, not weeks. A branch that lasts more than two days is a warning sign worth investigating.

- 
**Automated testing on every commit**: Your CI pipeline runs the test suite immediately. If something breaks, you know in minutes, not at the end of a sprint.

- 
**Feature flags**: Half-built features stay hidden behind a toggle until they are ready to ship. Users never see incomplete work, even though it is already in production code.

The result is a codebase that is always releasable -- not "releasable after we merge the feature branch and run QA for a week," but releasable right now if needed. That is the fundamental promise.

![Multiple code commits converging into one main branch in trunk-based development](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-09/f48347-inline1.webp)

## Short-lived branches: measure them in hours, not weeks

In trunk-based development, you are not banned from branches. You are banned from long branches.

A branch you open at 9 AM, work on through the morning, get a code review on after lunch, and merge to main before 5 PM is exactly the right kind. It gives your teammates a chance to review the work before it lands on trunk. It is small enough to understand in one read. Conflicts, if any, resolve in minutes.

A branch that lives three weeks while one developer builds an entire authentication system in isolation is the problem. When it finally comes time to merge, the team spends more time resolving conflicts than it spent building the feature.

The practical threshold most trunk-based teams use: if a branch has not merged within two days, something needs to change. Either the feature is too large and needs breaking into smaller pieces, or it needs a feature flag so partial work can land safely.

Breaking work into smaller pieces is the core discipline trunk-based development actually develops. Instead of "build the whole dashboard," you ship "add the data layer," then "add the first chart," then "wire up the filters." Each piece merges to trunk, gets tested, and ships independently. The full feature emerges incrementally over several commits.

This sounds slower. In practice it is faster, because you find problems while the context is still fresh and the surface area is still small.

## Feature flags: how you ship incomplete work without breaking anything

Feature flags (also called feature toggles) are the mechanism that makes trunk-based development practical when a feature cannot be finished in a single short-lived branch.

The idea is simple: wrap new functionality in a conditional that only activates when a specific flag is turned on.

`if (featureFlags.newReportingDashboard) {
  renderNewDashboard();
} else {
  renderOldDashboard();
}`The new code is deployed to production. It just does not run for users until you flip the toggle. This means:

- 
Developers can commit work-in-progress to trunk without affecting anyone

- 
QA can test the feature in production by enabling the flag for a specific user or environment

- 
A launch becomes a configuration change, not a deployment event

- 
If something breaks, you turn the flag off without a rollback or hotfix branch

Feature flag infrastructure scales from a simple environment variable checked at startup to dedicated feature flag platforms. For a team just starting out, a config file or per-environment variable is enough. The point is the capability, not the tooling complexity.

![Feature flag toggle switches controlling code deployment in trunk-based development](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-09/d557e7-inline2.webp)

## When trunk-based development is not the right call

It is worth saying directly: trunk-based development is not universally better. It fits specific contexts.

Skip it if:

**Your CI/CD pipeline is not ready.** Trunk-based development without automated tests on every commit is not a branching strategy -- it is a broken codebase accumulating fast. The testing infrastructure has to be in place before the branching model can work.

**The team cannot commit frequently by nature.** Distributed teams where contributors work asynchronously across time zones, or open-source projects where contributors submit infrequent batches, will struggle with the daily commit cadence.

**You are in a regulated environment with mandatory release windows.** Some industries require external sign-off, long QA cycles, and formal audit trails by release branch. Gitflow's structured release branches map better to that kind of workflow.

**Team discipline is not there yet.** Trunk-based development requires that every commit to main either passes all tests or gets fixed immediately. If your team tolerates broken builds, the shared trunk becomes everyone's shared problem.

Gitflow is a reasonable choice for teams with quarterly release schedules, multiple concurrent features developed by separate squads, or compliance requirements that demand branch-level isolation. The question is honest fit, not which approach wins on principle.

## How to move from Gitflow to trunk-based development without a crisis

If your team is on Gitflow and wants to try trunk-based development, the migration does not have to be a hard cutover.

Start by stopping the creation of new long-lived branches. Features started after the decision get short-lived branches. Features already in progress on long branches finish under the old model. The two approaches coexist temporarily.

Before committing unfinished work to trunk, you need feature flags in place. Setting up even a basic feature flag system is the prerequisite for everything else. Without it, trunk-based development means shipping incomplete UI to production users.

Then enforce CI on the main branch: automated tests run on every push, failing tests block the merge, and no one merges without a passing build. This is the non-negotiable part.

Finally, define the two-day rule explicitly: any branch older than two days gets a conversation about what to do with it. Break the feature smaller, add a flag, or ship what is already done. Make this visible in your pull request process.

The uncomfortable adjustment most teams face: accepting that "partially complete" is a valid thing to commit, as long as it is hidden behind a flag and does not break existing tests.

## What the DORA report data says about shipping speed

The DevOps Research and Assessment (DORA) reports are the closest thing software development has to large-scale empirical research on team practices. The 2021 DORA report found that elite-performing teams are 2.3 times more likely to use trunk-based development compared to lower-performing teams.

Elite performers in the DORA framework deploy multiple times per day, with lead times from commit to production measured in hours rather than weeks. Trunk-based development correlates consistently with those outcomes.

The important caveat: correlation is not causation. High-performing teams adopt trunk-based development because they have already invested in the underlying discipline -- automated testing, solid CI/CD infrastructure, engineers who write small, focused changes. Those foundations come first. Trunk-based development is the branching model that fits that context, not the thing that creates it.

Biscuit figures this one out fast: a good retriever does not try to carry three balls at once. One commit, one review, one merge. Good boy.

![Continuous deployment pipeline visualization showing code flowing from commits to production](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-09/6305c9-inline3.webp)

## Is trunk-based development worth switching to?

If your team spends meaningful time each sprint on merge conflicts, delays releases because "the feature branch is not ready," or has branches open so long no one remembers what they were for -- trunk-based development is worth a serious evaluation.

The daily commit cadence is demanding. The feature flag infrastructure takes setup. The cultural shift takes a few weeks. But the outcome -- a codebase that is always releasable, merge conflicts measured in lines not files, and releases that are routine rather than crises -- is a meaningful improvement in how the team works.

Start small: one team, one sprint, CI running on every push, feature flags in place. See what changes in four weeks.

## FAQ

### What is the difference between trunk-based development and Gitflow?

Gitflow uses multiple long-lived branches (develop, release, hotfix, feature) with formal roles for each. Trunk-based development uses a single main branch and short-lived branches that merge back within hours or days. Gitflow fits scheduled release cycles; trunk-based fits continuous delivery environments where the team ships frequently.

### Do you need feature flags for trunk-based development?

Not for very small features that can be completed and merged in a single day. But for anything that takes more than a day to build, feature flags are how you commit incomplete work to trunk without breaking what users see. Most trunk-based teams treat them as standard practice rather than an optional extra.

### Is trunk-based development good for small teams?

Yes. Small teams often find it easier to adopt because coordination overhead is low and the team can respond quickly when something breaks on trunk. The daily commit discipline and short branch duration are both easier to maintain when everyone is working closely together and can communicate immediately.

### How do code reviews work in trunk-based development?

Code review happens on short-lived branches before they merge to trunk. The review is faster because the change is smaller -- a few hundred lines instead of a few thousand. Some teams also use pair programming to review in real time. The key requirement is that review happens before merge, not after.

### What companies use trunk-based development?

Google is the most documented case: 35,000 developers and QA automators working in a single monorepo trunk. Facebook, Netflix, and parts of Microsoft also use trunk-based development or close variants. It is common at companies where continuous deployment is the norm and fast iteration is a competitive advantage.

### Can trunk-based development work without a CI/CD pipeline?

Not safely. Without automated tests running on every commit, daily pushes to a shared trunk quickly produce a broken codebase. CI is the enforcement mechanism that makes the model viable -- it tells you within minutes whether a commit broke something. Getting CI in place is the prerequisite, not an optional step.

---

### Note-Taking Apps for Students: Which Ones Actually Work

URL: https://formula.dog/journal/note-taking-apps-for-students

> We cut through 8 note-taking apps for students and found what actually works past week four. Short list, honest opinions, zero filler.

Searching for note taking apps for students that actually survive past orientation week? The short answer is three tools, not eight: **Notion with a .edu email**, **OneNote for Windows**, or **GoodNotes if you have an iPad with a stylus**. Most students need one of those, not every app in a recommended list.

Which one fits depends on your device, your major, and how much time you're willing to invest in setting up a system. Here's what actually works past week four, and what you'll likely uninstall before midterms.

## Why you end up with 4 note apps and use none of them properly

Most students install apps in batches during orientation week, when someone in a Discord server shares a list titled "apps every student needs." By October, three of those apps still have the default "Untitled Note" created to test the UI.

The fragmentation problem is real. One app for class notes, one for to-do lists, one for project files, and a shared Google Doc that nobody can find three months later. The fix is not finding the perfect app - it's picking one and sticking with it long enough to actually build a system.

A 2026 survey of over 6,500 students found that just four apps captured more than 75% of actual usage: Evernote, Notion, Roam Research, and Obsidian. Not because those four are objectively better than everything else, but because students who committed to one long enough to learn it stopped looking for something better.

The first two weeks with any app feel rough. That's normal. The switching cost is the problem, not the app.

## The apps that actually survive a full semester

**Notion** is the default right now for most students. A .edu email gets you the Plus plan free - unlimited blocks, file uploads, and full page history. The template ecosystem is enormous: study schedules, syllabus trackers, reading logs, weekly reviews. Downside: the offline mode is limited, and a complex Notion workspace built in week one often collapses under its own structure by week six. Keep it simple at the start.

**OneNote** wins if your campus runs Microsoft 365. It's free, syncs across everything, handles typed and handwritten notes, and lets you drop images or PDFs directly into a page without a separate step. The interface is more forgiving for people who want to just start typing without thinking about structure. If you're on Windows, this is the zero-friction option.

**GoodNotes** is the right call if you're on an iPad with an Apple Pencil. STEM students rely on it for equations, diagrams, and annotating PDFs directly. At $9.99 per year, it's one of the better-priced specialized tools. The handwriting recognition is solid and search actually works on handwritten content.

**Notability** is the pick for lecture-heavy programs. It records audio while you write - tap any note later and jump to that exact moment in the recording. At $14.99 per year, it's the one tool that meaningfully changes how you capture lectures. Worth it for programs where professors talk faster than you can type.

**Obsidian** is for the student who already knows what a markdown file is. It's free for personal use, stores everything locally, and links notes like a wiki - useful if you're building connected knowledge rather than isolated notes per class. Steep learning curve. Pays off over years, not semesters.

![Student desk with laptop showing organized digital note-taking interface, warm editorial lighting](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-09/0e8d10-inline1.webp)

If you're looking for an AI workspace that handles documents, notes, and design assets in one place without juggling five tabs:

## Handwriting vs typing: what the research actually says

The "handwriting is better for learning" argument is everywhere in productivity circles. It's also more nuanced than it sounds.

A 2024 meta-analysis combining 24 studies found higher course outcomes for students who took and reviewed handwritten notes. The mechanism makes intuitive sense: when you can't type fast enough to catch every word, your brain summarizes and re-encodes information as you write. That extra processing step helps retention.

The catch: some of those studies measured performance on isolated lab tasks, not full-semester course grades. Typing is faster, more searchable, and more practical for most real classroom situations - especially when the professor goes off-script or uses slides faster than you can sketch.

The approach that actually works for most students: write on a tablet with a stylus. You get the cognitive benefit of handwriting without losing search, sync, or backup. GoodNotes and Notability both handle this well. Your notes are searchable, shareable, and don't disappear if you spill coffee on a notebook.

Skip this setup entirely if you don't already own an iPad. The learning benefit does not justify buying new hardware just for note-taking.

## If you're already living in Google Sheets, where do notes fit in?

If you're the kind of student who keeps everything in a spreadsheet - assignments tracked, readings logged, grades monitored - you're already thinking about data more systematically than most. But Sheets is not a great place for prose notes.

The problem is that cells are not paragraphs. You can store lecture notes in a cell, but you lose formatting, hierarchy, and any ability to scan quickly. Using Sheets for unstructured text is like using VLOOKUP to write an essay. Technically possible. Not what the tool is for.

What works: use Sheets for the structured stuff (assignment deadlines, exam dates, grade calculations, semester budget) and pair it with one note app for everything else (class notes, ideas, readings, drafts). The two tools cover different jobs.

For spreadsheet-minded students, the cleanest pairing is OneNote or Notion for notes alongside Sheets for tracking. Notion's database views can also replace some of what you'd do in Sheets if you want fewer tools open at once.

## AI note-taking features: which ones are real, which are just marketing

Every note app has added an "AI" feature in the last 18 months. Most of them are autocomplete with a different name. A few are genuinely useful.

**Notability's audio-to-note sync** is the most useful: it connects your recording to your written notes at the timestamp level. Tap any word in your notes, hear what the professor said at that exact moment. Not flashy, just a feature that changes your workflow.

**Apple Intelligence summaries** (Apple Notes, iOS 18+) can summarize long notes or suggest continuations. Useful for drafting. Less useful for technical content where accuracy matters more than fluency.

**Atlas** is the outlier that deserves its own mention. It lets you upload course readings and then answers questions by pointing to the exact passage in the source. For humanities, pre-law, or social science students working with dense academic texts, this is genuinely different from asking a generic LLM.

For students who attend seminars, study groups, or lectures where audio capture matters:

For language students who want note-taking to also support listening comprehension and active recall:

![Student studying in library with laptop and textbooks, focused and organized workspace](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-09/09a891-inline2.webp)

## Apps most students quit before midterms (and why)

**Evernote** used to be the default recommendation for students. Pricing changes in 2023-2024 pushed most people off the free plan, which now limits you to one device. The paid version at $14.99 per month is hard to justify when Notion is free with a student email. Skip it unless you're an existing power user with years of notes already inside.

**Roam Research** has a devoted following but a steep entry cost - both the $15 per month price and the time investment required to learn its linked-thinking approach. It's built for people building a long-term knowledge system, not for students who need to capture and review lecture content on a weekly cycle.

**Bear** is a genuinely clean, well-designed app. It's also Apple-only. If you're on Windows or Android, it's simply not an option. Even on Apple devices, the sync requires a $14.99 per year subscription, at which point Notion or Obsidian are harder to argue against.

The pattern: apps students quit are either too expensive for a student budget, require too much setup time during the semester, or are locked to a platform you don't fully live in.

![Minimalist student desk setup, top-down view with laptop, notebook, and headphones](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-09/4792e2-inline3.webp)

## How to pick your setup without installing everything first

Start with the free version of whatever fits your actual situation:

- 
Apple device, no stylus: start with **Apple Notes**. It's already on your device. Add Notion once you need more structure.

- 
Windows campus or Microsoft 365: **OneNote**. Zero-friction setup. Use it for a full month before looking at anything else.

- 
iPad with Apple Pencil: trial **GoodNotes** for one week, then **Notability** for one week. Pick one. Do not install both.

- 
Cross-platform or Linux: **Obsidian** - free, local, no subscription required for basic use.

- 
Research-heavy major with long reading lists: try **Atlas** once you have actual course materials to test against.

The rule that saves time: one month with one app. If you're still redesigning your note system in week three, the problem is probably not the app. It's the fact that no system survives contact with a full course load unless you keep it simple.

Biscuit has already fetched the right formula for your spreadsheets. Picking your note app deserves the same no-nonsense approach.

## FAQ

### What is the best free note-taking app for students?

Notion (free with a .edu email on the Plus plan) and OneNote (free with a Microsoft account) are the two strongest free options. Apple Notes is also solid if you're on Apple devices and want zero setup time.

### Is Notion actually worth using for student notes?

Yes, especially with a .edu email that unlocks the Plus plan for free. Notion works well for organizing notes by class, building study schedules, and tracking assignments. The main risk is overcomplicating your workspace in the first week - keep it simple and build from there.

### Can I use Google Sheets for note-taking?

You can, but it's not the right tool for unstructured notes. Sheets works well for tracking assignments, exam dates, and grades. For class notes, drafts, and reading summaries, a dedicated note app handles prose much better.

### Are AI note-taking apps worth it for students?

It depends on the feature. Notability's audio-timestamp sync is genuinely useful for lecture-heavy programs. Atlas's source-tracing is useful for research-heavy majors. Generic AI summaries in most apps are less reliable for technical content where accuracy matters.

### What is the best note-taking app for iPad?

GoodNotes 6 for STEM students who draw diagrams and equations, Notability for lecture recording with audio sync. Both cost under $15 per year. If you're not writing by hand, any of the free options work just as well on iPad.

### Should students use handwriting or typing for notes?

A 2024 meta-analysis found handwritten notes are associated with higher course outcomes, likely because summarizing while writing reinforces memory. The practical middle path: use a tablet with a stylus so notes are handwritten but searchable. If you don't own a tablet, typed notes in a well-organized app are still far better than no system at all.

### How many note-taking apps do students actually need?

One for notes, possibly one for flashcards if you use spaced repetition (like Anki). Most students who use more than two apps end up with fragmented notes across all of them and no single reliable place to study from. One solid app used consistently beats four apps used inconsistently.

---

### Monorepo vs Polyrepo: How to Choose the Right Setup

URL: https://formula.dog/journal/monorepo-vs-polyrepo

> Should your team use one repo or many? This guide breaks down the real trade-offs and gives you a practical framework to decide.

Monorepo vs polyrepo is a debate that resurfaces every time your engineering team grows faster than your build times. The short answer: a monorepo wins when teams share code regularly and coordinate changes across a common surface; a polyrepo wins when teams are genuinely independent and deploy without ever waiting on each other. Everything in between depends on how tightly coupled your services actually are, and how much coordination overhead you are willing to absorb. This article walks through the real trade-offs, the signals that point one way or the other, and a practical framework for making the call.

## The real question is about coupling, not about repo count

Most monorepo vs polyrepo debates start with the wrong question. The number of repos is not the issue. The issue is whether your teams need to move together.

If Team A's changes routinely require Team B to update something on the same release cycle, you have tightly coupled work. One repo for that is almost always the cleaner answer. If Team A and Team B ship on their own schedules, touch different parts of the system, and never wait on each other, separate repos make genuine sense.

The worst possible outcome: two separate repos for code that still needs to deploy together. You get all the coordination cost of a monorepo with none of the benefits. Your teams end up opening PRs in repo A and repo B simultaneously, hoping both pass CI at the same time. This pattern is surprisingly common in organizations that chose polyrepo early and then let their services grow more interdependent than originally planned.

The first step before choosing anything is to draw a simple dependency map. List every service or package you own and draw arrows where one depends on another. If the arrows form a dense cluster, that cluster belongs in one repo.

![Software development team gathered around a whiteboard reviewing code architecture diagrams](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/accorata/2026-09/be767c-img-1-inline.webp)

## Why Google, Meta, and Microsoft all landed on monorepos at scale

Google keeps most of its code in a single repository estimated at over 80 TB of data and 2 billion lines of code. Meta and Microsoft do the same for their core product surfaces. This is not because big companies love complexity - it is because at scale, keeping dependencies in sync across hundreds of repos becomes a full-time engineering problem.

A single API change in a shared library might require coordinated updates across 40 different repos. In a monorepo, that is one pull request. One review. One merge. One rollback if something goes wrong.

According to research published by Sourcegraph, 63% of companies with 50 or more developers now use a monorepo for at least part of their codebase, up sharply from figures three years earlier.

The concrete benefit that matters most: atomic commits. When a breaking change in your API also requires frontend and backend updates, a monorepo lets you land all three changes in one PR, test them together, and roll back all three as a unit if something goes wrong. With polyrepo, you open three separate PRs, wait for three separate review cycles, and manage a window where your services are running mismatched versions.

One engineering team reported moving from occasional deployments to more than 40 app releases per week after migrating their frontend packages into an Nx monorepo. Angular upgrades that previously took months became routine tasks that teams handled without stopping other work.

## Polyrepo's hidden coordination tax

Polyrepo has real advantages worth taking seriously. Each team controls its own CI/CD pipeline, its own release cadence, its own access controls. Security and compliance teams often prefer it: access to code can be restricted to named personnel on a per-repo basis, which matters in regulated industries. Open-source components live more cleanly in their own public repos without exposing internal code.

For teams that are genuinely independent, these advantages are real. A small services team that owns a data pipeline running on its own schedule and touching no shared code has little to gain from sitting inside a larger monorepo.

But polyrepo organizations quietly accumulate costs that did not show up in the original decision. Dependency versioning across repos becomes its own discipline. A shared utility library goes stale in some repos while staying current in others. Someone has to maintain a compatibility matrix just to know which version of which library works with which version of which service.

One metric worth knowing: median PR cycle time in monorepos runs around 19 hours, versus about 2 hours in polyrepos. PRs in monorepos tend to be larger because they touch more surfaces, which slows review. But when a polyrepo change requires three coordinated PRs across three repos to land a single feature, the aggregate cycle time often exceeds the monorepo figure anyway - with the added risk of partial merges leaving services in inconsistent states.

The pattern that catches teams off guard: "we started with separate repos for independence, but now every release requires opening PRs in four places." At that point you have the worst of both worlds.

## Build times stopped being the deciding factor in 2024

The classic objection to monorepos was build time. If your repo has 200 packages and you change one file, do you really want to rebuild all 200?

This argument expired somewhere around 2022 to 2024, depending on your stack.

Modern build tools use content-aware caching. They only rebuild what changed, and skip anything with identical inputs. A change to the `payments` package does not trigger a rebuild of `design-system` if nothing in `design-system` changed. GitHub Actions provides 10 GB of free cache storage before you need a paid remote cache solution.

Turborepo handles most JavaScript and TypeScript teams well up to around 20 packages. The configuration is a single `turbo.json`, remote caching works on Vercel for free or self-hosted, and the learning curve is low enough that a team can be productive within a day.

Past 20 packages, or when the build spans multiple languages, Nx's more structured approach tends to justify the steeper learning curve. Nx adds code generation, automatic CI distribution, and fine-grained dependency tracking that becomes increasingly valuable as the repo grows.

For very large organizations running thousands of packages across multiple languages, Bazel (Google's open-source build system) is the only tool designed for that scale. The setup cost is significant and almost always requires a dedicated platform engineering team.

![Multiple parallel deployment pipelines flowing from a central codebase, abstract DevOps infrastructure concept](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/accorata/2026-09/6761f6-img-2-inline.webp)

## Four questions that settle the debate for your team

There is no universal right answer, but there is a reliable framework.

**1. Do your teams share code that changes frequently?**
If yes - a shared design system, a shared API client library, shared authentication logic - a monorepo is almost always the better choice. Keeping a shared library synchronized across multiple repos requires constant discipline and almost always drifts.

**2. Do your teams deploy independently?**
If Team A's service ships on Tuesday and Team B's ships on Thursday without any coordination needed, polyrepo earns its place. If releasing one service requires a simultaneous release of another, that coupling cost belongs in the equation.

**3. How many engineers are touching this codebase?**
Below 20 engineers, repo structure matters less than you think. Above 50, the coordination costs of polyrepo start accumulating visibly. Above 200, the case for a monorepo becomes very strong unless teams are genuinely siloed by product and technology.

**4. Do you have security or compliance requirements that isolate code per team?**
In regulated industries - finance, healthcare, some government contexts - access to code may need to be restricted to named personnel. That constraint can override the other answers. If hard code isolation is a compliance requirement, polyrepo is not a choice, it is a constraint.

If you answered "yes" to question 1 and "no" to question 4, a monorepo is almost certainly the right call. If you answered "no" to question 1 and "yes" to question 2, polyrepo is a defensible choice. Everything else is a judgment call.

## What most growing teams actually land on

Very few mature engineering organizations operate at either extreme. The pattern that appears most often: a monorepo for the core product (frontend, shared libraries, backend services that depend on each other), and separate repos for truly independent components.

A data pipeline that runs on its own schedule and shares no code with the main product belongs outside the monorepo. An internal tool maintained by a single-person team belongs outside. An open-source library that needs public visibility belongs outside.

This is not a compromise. It is the correct answer to a question that rarely has a clean binary answer. Keep things together that need to move together. Separate what is genuinely independent.

The important thing is to make the decision deliberately, not by default. Most teams that end up with polyrepo sprawl did not choose it: they started one service, then another, then another, and never stopped to ask whether those services needed to live together.

## The tooling that makes either approach actually work

**For monorepos:**

- 
Nx: strongest feature set, good for polyglot builds and teams past 20 packages. Higher learning curve but scales further.

- 
Turborepo: simpler to start, excellent for JS/TS teams under 20 packages. Native Vercel caching or self-hosted options.

- 
Bazel: for very large multi-language repos at enterprise scale. Significant setup investment required.

**For polyrepos:**

- 
A versioning discipline for shared libraries is not optional. Without semantic versioning and a consistent changelog process, dependency drift becomes the norm within six months.

- 
CI/CD tooling that triggers cross-repo pipelines when a shared dependency changes. GitHub Actions supports this via `workflow_dispatch` and `repository_dispatch` events between repos.

- 
A dependency registry (npm private registry, GitHub Packages, Artifactory) to manage shared package distribution.

Biscuit can fetch the config file. The call on which one to use still comes down to those four questions.

![Developer working at dual monitor setup reviewing pull requests in a dark home office](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/accorata/2026-09/47a076-img-3-inline.webp)

## FAQ

### What is the difference between monorepo and polyrepo?

A monorepo stores all projects in a single repository, making shared code and atomic changes straightforward. A polyrepo gives each project or team its own repository, offering more autonomy and isolated access control. The right choice depends on how tightly coupled your teams and services are.

### Do companies like Google really use monorepos?

Yes. Google, Meta, and Microsoft all use monorepos for their core products. Google's single repository is estimated at over 80 TB and 2 billion lines of code. These organizations chose monorepos because the coordination cost of syncing hundreds of separate repos outweighed the complexity of maintaining one large one.

### Are monorepos slower to build than polyrepos?

They used to be, but modern caching tools like Nx and Turborepo have largely eliminated this problem. These tools use content-aware caching that only rebuilds packages whose inputs actually changed, so a change in one package does not trigger a full rebuild of the entire repo.

### When should a startup use a polyrepo?

When teams are genuinely independent, share no code, and can deploy without coordinating with other teams. Below 20 engineers, the structure matters less than you might think. The risk is that services grow more coupled over time while remaining in separate repos, which creates the worst of both worlds.

### What is a hybrid repo strategy?

A hybrid strategy uses a monorepo for tightly coupled services (shared libraries, frontend, core backend) and separate repos for truly independent components (a public open-source library, a standalone data pipeline, an internal tool with its own team). Most mature engineering organizations land here.

### What tools work best for a monorepo?

Turborepo is a good default for JavaScript and TypeScript teams with under 20 packages: low learning curve, simple configuration. Nx works better for larger repos or polyglot builds and adds code generation and automatic CI distribution. Bazel is reserved for very large multi-language repos at enterprise scale.

### Can you switch from polyrepo to monorepo later?

Yes, and many teams do. The migration involves merging repositories and setting up a build tool like Nx or Turborepo to handle caching. The main cost is rewriting CI/CD pipelines and adjusting access control. Teams typically do this incrementally, moving the most tightly coupled repos first.

---

### Cyclomatic Complexity: What It Is and How to Fix It

URL: https://formula.dog/journal/cyclomatic-complexity-what-it-is-and-how-to-fix-it

> Every if statement adds a path. Cyclomatic complexity counts them. Here is how to calculate the score, what the thresholds mean, and how to refactor your way back to sanity.

Cyclomatic complexity is a number that tells you how many independent execution paths exist through a piece of code. A function with one `if` statement has two paths: one where the condition is true, one where it is false. Every new `if`, `while`, `for`, or `case` adds another path to that count.

Data analysts, ops teams reviewing sprint metrics, and anyone who reads static analysis reports will encounter this number regularly. It shows up in pull request checks, code quality dashboards, and automated linting pipelines.

The metric was invented by Thomas McCabe in 1976 and remains the standard benchmark when engineers ask: "Is this function getting too hard to test?" The short version: keep it below 10. Above 15, you are in refactoring territory. Biscuit would have fetched a simpler function from the start.

## The Formula Behind Cyclomatic Complexity

The full formula looks like this:

`M = E - N + 2P`Where:

- 
**M** is the cyclomatic complexity score

- 
**E** is the number of edges in the control flow graph

- 
**N** is the number of nodes in the control flow graph

- 
**P** is the number of connected components (usually 1 per function)

For most cases, you do not need to draw the control flow graph. The shortcut is faster:

`CC = Decision Points + 1`Count every `if`, `else if`, `while`, `for`, `&&`, `||`, `case`, or ternary operator in the function. Add 1. That is your cyclomatic complexity.

A function with zero branches scores 1 -- it is a straight line from start to finish. Add one `if`, and you are at 2. Add five more conditions and you are at 7, which is still manageable. Add ten more and now you have a problem.

The score directly maps to the minimum number of test cases required to cover every path. A function with CC = 10 needs at least 10 tests for full path coverage. That alone makes the number useful during sprint planning.

## Calculating It by Hand: A Real Example

Take this Python function:

`def process_order(order, user):
    if not order:
        return None
    if not user.is_active:
        return None
    if order.total > user.credit_limit:
        if not user.has_override:
            return None
    if order.requires_signature and not user.has_signed:
        return None
    return order.confirm()`Walk through the decision points:

- 
`if not order` = +1

- 
`if not user.is_active` = +1

- 
`if order.total > user.credit_limit` = +1

- 
`if not user.has_override` = +1 (nested inside the previous block)

- 
`if order.requires_signature` = +1

- 
`and not user.has_signed` = +1 (the `and` counts as a decision point)

**Total: 6 decision points + 1 = CC of 7.**

Manageable right now, but accumulating fast. Add two more input-validation conditions and you are at 9. Add one sprint of new business rules and you hit 13 -- that is when code reviewers start drawing red circles.

The nested condition (`if not user.has_override`) is the quiet danger. Sequential conditions are easier to read; nested conditions multiply the paths exponentially.

![Whiteboard control flow graph showing decision nodes and branches for cyclomatic complexity](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-08/10095b-inline1.webp)

## What Your Score Actually Means

Thresholds differ slightly by organization and domain, but the standard ranges are:

- 
**CC 1-10 (Low):** Acceptable for most codebases.

- 
**CC 11-15 (Moderate):** Add peer review; consider splitting the function.

- 
**CC 16-20 (High):** Refactor before adding new features.

- 
**CC 21+ (Critical):** High defect probability; prioritize refactoring now.

For safety-critical systems (medical devices, aviation software, financial engines), many teams set the hard limit at 5 to 7. The [NIST guidelines](https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication500-235.pdf) recommend no higher than 10 for functions in regulated software. Regular product code generally lives comfortably under 10.

One caveat worth noting: the score counts decisions, not difficulty. A `switch` statement with 20 simple string mappings scores 21 but takes five seconds to read. A 3-level nested block might score 4 and take five minutes to understand. The number is a signal, not a verdict.

## Cyclomatic vs. Cognitive Complexity: The Real Difference

Cyclomatic complexity was designed to tell you how many test cases you need. It treats all decision points equally: one `if` counts the same whether it is nested three levels deep or sitting at the top of the function.

Cognitive complexity, introduced by SonarSource, measures something different: how hard the code actually is to read. It penalizes nesting more aggressively than sequential conditions, which better reflects how developers actually process code.

The practical difference:

`# Version A: 3 sequential conditions -- CC = 4, Cognitive = 3
def check_a(x, y, z):
    if x > 0:
        return False
    if y > 0:
        return False
    if z > 0:
        return False
    return True`
```
`# Version B: 3 nested conditions -- CC = 4, Cognitive = 6
def check_b(x, y, z):
    if x > 0:
        if y > 0:
            if z > 0:
                return False
    return True`
```
Both score **CC = 4**. But Version B is harder to read -- you need to hold the outer condition in your head while parsing the inner ones. Cognitive complexity correctly flags Version B as more demanding.

Use cyclomatic complexity for test planning and defect risk assessment. Use cognitive complexity to spot code that will slow your team down during review. They answer different questions.

![Two software engineers doing a code review at a standing desk](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-08/e9c9a1-inline2.webp)

## Complex Excel Formulas Have the Same Problem

This is where it gets relevant for spreadsheet workers.

A deeply nested `IF` formula has exactly the same structure as deeply nested code. Each condition adds a path, and each layer of nesting adds cognitive load. The formula below has four decision points, giving a CC equivalent of 5:

`=IF(A2="Sales",IF(B2>10000,"Tier 1",IF(B2>5000,"Tier 2","Tier 3")),IF(A2="Support","Fixed","Other"))`That is not terrible yet. But add one more tier or one more department and the formula becomes the kind of thing nobody wants to edit six months later -- including the person who wrote it.

The fix in Excel mirrors the fix in code: flatten the nesting. Use `IFS()` when you have multiple conditions returning different values from the same column:

`=IFS(AND(A2="Sales",B2>10000),"Tier 1",AND(A2="Sales",B2>5000),"Tier 2",A2="Sales","Tier 3",A2="Support","Fixed",TRUE,"Other")`Or better: extract the tier logic to a helper column and reference it in your main formula. Two simple formulas are easier to audit than one complex one. Voila ce que ca donne dans une vraie cellule: the complexity drops, the logic stays.

## Five Ways to Lower Your Cyclomatic Complexity

**1. Extract helper functions.**

If a function validates input, transforms data, and writes to a database, it is doing three jobs. Split it into three functions. Each drops to a lower score and can be tested independently.

**2. Use early returns (guard clauses).**

Instead of nesting success logic inside multiple `if` blocks, reject the bad cases early and return. The happy path stays at the left margin.

`# Before: nested -- harder to follow
def process(user):
    if user:
        if user.is_active:
            if user.has_permission:
                return do_work(user)
    return None

# After: guard clauses -- easier to extend
def process(user):
    if not user:
        return None
    if not user.is_active:
        return None
    if not user.has_permission:
        return None
    return do_work(user)`Same cyclomatic complexity in both cases, but the guard-clause version has lower cognitive complexity and is easier to extend.

**3. Simplify boolean expressions.**

A long `if (a and b and not c and d)` condition adds multiple decision points and is hard to read. Extract it to a named variable: `eligible = a and b and not c and d`. The `if eligible:` line reads in plain English and the intent becomes clear.

**4. Replace conditionals with lookup tables.**

A long `if/elif` chain that maps values to outputs is a hidden lookup table. Replace it with a dictionary:

`# Before: CC = 5 for 4 branches
def get_rate(category):
    if category == "A":
        return 0.05
    elif category == "B":
        return 0.10
    elif category == "C":
        return 0.15
    else:
        return 0.20

# After: CC = 1
RATES = {"A": 0.05, "B": 0.10, "C": 0.15}
def get_rate(category):
    return RATES.get(category, 0.20)`**5. Split large functions by concern.**

If a function runs past 25 lines, ask what it actually does. Functions handling multiple concerns accumulate decision points from all of them. Breaking them apart makes each piece easier to test and reuse.

## Tools That Calculate It Automatically

You do not have to count by hand on every pull request. Several tools integrate directly into standard development workflows:

- 
**SonarQube / SonarCloud** -- calculates cyclomatic and cognitive complexity per function on every pull request; sends alerts when thresholds are breached

- 
**Radon** (Python) -- run `radon cc yourfile.py -s` in the terminal to get a score and letter grade per function

- 
**ESLint** (JavaScript/TypeScript) -- the `complexity` rule enforces a hard limit: `"complexity": ["error", 10]`

- 
**CodeClimate** -- tracks complexity trends across branches and pull requests, useful for monitoring drift over time

- 
**VS Code extensions** -- tools like *CodeMetrics* show the complexity score inline next to function signatures as you type

A practical setup: enforce a warning at 10 and a hard error at 15. That lets you catch drift without blocking every pull request on a minor overage. Review anything above 10 in code review; automate the block at 15.

## FAQ

### What is cyclomatic complexity?

Cyclomatic complexity is a software metric that counts the number of independent execution paths through a function or module. It was introduced by Thomas McCabe in 1976 and is calculated using the formula CC = decision points + 1, where decision points include if statements, loops, case clauses, and logical operators like && and ||.

### What is a good cyclomatic complexity score?

Scores between 1 and 10 are generally considered acceptable for most production code. Scores from 11 to 15 suggest the function is getting complex enough to warrant peer review and possible refactoring. Anything above 15 is a strong candidate for splitting, and above 20 is associated with significantly higher defect rates. Safety-critical systems often target a maximum of 5 to 7.

### How do you calculate cyclomatic complexity manually?

The fastest method: count every if, else if, while, for, case, ternary operator, and logical operator (&& or ||) in the function. Add 1. That is your cyclomatic complexity score. The full formula is M = E - N + 2P (edges minus nodes plus 2 times connected components), which is equivalent but requires drawing the control flow graph.

### What is the difference between cyclomatic complexity and cognitive complexity?

Cyclomatic complexity counts execution paths and is useful for estimating test coverage requirements. Cognitive complexity measures how hard the code is to read by penalizing nesting more heavily than sequential conditions. Two functions can have identical cyclomatic complexity scores but very different cognitive complexity scores if one uses deep nesting and the other uses guard clauses.

### What causes high cyclomatic complexity?

The most common causes are functions that handle too many responsibilities, deeply nested conditional logic, long if/elif/switch chains that map inputs to outputs, and functions that have grown organically over multiple sprints without refactoring. Business logic with many edge cases is a natural contributor, but even legitimate domain complexity can often be restructured using lookup tables or extracted helper functions.

### Does cyclomatic complexity apply to Excel formulas?

Not formally, but the underlying concept applies directly. A nested IF formula has the same structural problem as nested code: each condition adds a decision path, and each level of nesting increases cognitive load. Replacing deeply nested IF chains with IFS(), using helper columns, or breaking a complex formula into two simpler ones follows the same logic as refactoring high-complexity code.

### Which tools measure cyclomatic complexity automatically?

SonarQube and SonarCloud measure it per function on every pull request. Radon is the standard tool for Python (radon cc file.py -s). ESLint has a built-in complexity rule for JavaScript. CodeClimate tracks trends over time across a codebase. For VS Code users, the CodeMetrics extension shows scores inline next to function definitions.

---

### The Best AI Excel Helper in 2026: What Actually Works

URL: https://formula.dog/journal/best-ai-excel-helper-2026

> An AI Excel helper writes your formula in seconds. But which tool works for your exact task? Formula.dog, ChatGPT, and Copilot compared with honest assessments.

An AI Excel helper solves one specific frustration: you know what you want the spreadsheet to do, but you have spent the last 15 minutes looking up whether it is XLOOKUP or INDEX-MATCH and arguing with the argument order. The formula generator handles that lookup. You paste, you move on.

In 2026, the field has expanded from simple formula generators to agents that can analyze your data, build pivot tables, and flag anomalies without being asked. Not all of that is useful. Some of it is. Here is what is actually worth keeping in your workflow.

## You know what you want, but the syntax will not come

This is the most common use case -- and the one every AI Excel helper should handle cleanly.

You need to pull a value from one sheet based on a match in another. You have done this with VLOOKUP a hundred times. You switched to XLOOKUP six months ago because it is cleaner. You cannot remember the exact argument order right now.

A good AI Excel helper returns something like this in under five seconds:

`=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])`With a plain-English note: `lookup_value` is what you are searching for, `lookup_array` is the column to search in, `return_array` is what to return when found. The optional `if_not_found` argument replaces the `#N/A` error with something readable, like `"not found"` or `0`.

That is the format that actually helps. Not a refresher on when XLOOKUP was introduced. Not a note about backward compatibility with Excel 2013. Just the formula and the arguments in plain English.

The difference between a fast tool and a slow one here comes down to two things: output format and context handling. Tools that default to generating the formula first and explaining second are faster to use in practice. Tools that bury the formula in paragraphs of setup add friction even when they are technically more thorough.

For Excel 365 users, XLOOKUP works as described. For Excel 2016 or earlier, you are on VLOOKUP or INDEX-MATCH -- the AI helper should flag this distinction; Formula.dog does.

![Hands typing on a laptop keyboard with spreadsheet columns visible in the background, illustrating the workflow of using an AI Excel helper](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-08/4a5b7e-inline1.webp)

## Why ChatGPT is not always the fastest path to a working formula

ChatGPT is an excellent tool for formulas. It is also an excellent tool for writing cover letters, summarizing research papers, and explaining what Fermat's Last Theorem means to someone with no math background. That range is the whole point of a general-purpose assistant -- and it is also the reason it is not always the most efficient choice for formula work specifically.

Three patterns slow ChatGPT down in practice:

**Unnecessary hedging.** Even when your question is unambiguous, ChatGPT often adds caveats: "this depends on your Excel version," "consider whether your data has blank cells," "you may need to adjust for regional separators." These observations are not wrong. They are also not what you needed when you typed "give me a SUMIF formula."

**Narrative formatting.** When you want a formula, you often want it in a code block with the arguments labeled. ChatGPT sometimes builds up to the formula through a paragraph of explanation, which means more scrolling before you get to the part you can paste.

**Session length for iterative formula work.** If you are refining a complicated nested formula across multiple back-and-forth messages, the free ChatGPT plan can hit context limits mid-session. That is a real friction cost for anything more than a one-shot request.

Where ChatGPT wins: complex problems where the right formula is not obvious before you have reasoned through the logic. "Build me a formula that calculates whether an employee qualifies for a bonus based on three conditions and their tenure" -- that is a thinking problem, not a syntax lookup. ChatGPT handles it well. So does Claude, which scored highest on edge-case formula accuracy in independent testing published earlier this year.

The honest read: ChatGPT is a thinking partner. Formula.dog is a formula dispenser. Both are useful. They are useful for different things.

## The part that saves the most time: explanations, not just the output

Most comparison articles focus on formula accuracy. That is the right starting point. The bigger productivity gain for most users, however, is explanation quality.

A formula you understand is one you can fix when it breaks, modify for a new dataset, and apply to a different problem next month. A formula you copy without understanding is one you will be searching for again in six weeks.

Here is a concrete example. You ask for a formula to count how many cells in column A contain the word "pending" anywhere in the text:

`=COUNTIF(A:A,"*pending*")`The useful explanation: the asterisks are wildcards. They tell the formula to match "pending" anywhere in the cell content -- before it, after it, or surrounded by other text. Without the wildcards, the formula counts only cells where the entire cell content is exactly "pending" with nothing else. That is a completely different condition, and it catches a lot of people off guard the first time.

Most users know COUNTIF. Many do not know the wildcard behavior by heart. One sentence of explanation is the difference between copying this formula once and applying it confidently across five different situations.

This applies across all formula categories. A note that SUMIFS uses AND logic (all conditions must be true) while SUMIF uses a single condition. A note that ARRAYFORMULA in Google Sheets propagates a formula down an entire column so you do not need to copy it row by row. A note that LET() in Excel 365 lets you name intermediate calculations so the formula reads like code rather than one unbroken chain of nested functions.

Look for tools that include brief argument-by-argument explanations as a default part of the output. That is where the long-term value is.

![Flat-lay desk scene with notebook showing spreadsheet diagrams, coffee and keyboard, representing the planning phase before using an AI formula helper](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-08/3ecd6b-inline2.webp)

## Formulas vs. VBA: how to ask for the right thing

One place AI Excel helpers regularly create more work than they save: when the right answer is VBA but you asked for a formula, or the other way around.

Here is a practical framework:

**Use a formula when:**

- 
The result should update automatically on recalculation

- 
You want the output linked to live source data

- 
The logic fits in a cell or array output

**Use VBA when:**

- 
You need to loop through rows and take conditional action

- 
You are automating a sequence involving multiple operations

- 
The operation should run once on demand, not on every sheet change

AI Excel helpers that support both formulas and VBA -- Formula.dog does, on its paid tiers -- can generate either. The problem is that without explicit guidance, some tools default to formulas when VBA would be cleaner, or default to VBA when a simple formula would do the job.

A tell: if you get back a formula with nine levels of nesting, pause and ask the tool: "Could this be done in VBA instead?" The answer is usually yes, and the VBA version is often fifteen readable lines vs. a formula string you need to squint at to understand.

One practical rule of thumb: if you are describing a sequence of steps ("first check X, then for each row do Y, then move data to sheet Z"), you probably need VBA. If you are describing an output ("return the value from column C that corresponds to the match in column A"), you probably need a formula.

## What Formula.dog does well -- and where it stops

Formula.dog is built around one interaction: describe a spreadsheet problem in plain English, get back a working formula, VBA snippet, or regex pattern in seconds. No account required for the free tier.

What it handles well:

- 
Excel formulas, including modern additions like LET, LAMBDA, and dynamic arrays

- 
Google Sheets formulas, including ARRAYFORMULA, QUERY, and IMPORTRANGE

- 
VBA snippets for standard macro workflows (available on paid tiers)

- 
Regex patterns for text manipulation tasks

- 
Basic formula support for Airtable and Notion

What it does not handle: Power Query M code, DAX for Power BI, Python, or R. If your workflow lives in any of those tools, this is not the right fit for those specific tasks.

Pricing is straightforward. Free tier: five formulas per day, no account, no card required. Paid option 1: a one-time $5 pack of 100 formulas that never expire. Paid option 2: $8 per month for unlimited formulas plus formula history and bookmarks.

The no-account free tier is worth noting specifically. Most tools in this category require an email address before you get anything useful. Being able to test the output before signing up removes a real barrier. Biscuit fetches the formula; you decide if he is worth keeping around.

## Three situations where no AI Excel helper will save you

Worth knowing before you build one into your standard workflow.

**Debugging a formula you inherited.** If a spreadsheet arrives with a 300-character nested formula and something is producing the wrong output, AI helpers can suggest likely problems. They can also suggest wrong fixes with apparent confidence, because they cannot see your actual data or how the formula interacts with the sheet's specific structure. Treat the AI output as a hypothesis. Test it in an isolated range with a small dataset before applying it anywhere critical.

**Formulas that depend on your exact file structure.** AI tools generate based on your description, not your file. If your named ranges have unusual casing, your column headers have trailing spaces, or your data validation is constraining inputs in ways you have forgotten about, the formula will need manual adjustment. Always test in a small range first. The formula may be technically correct and still not work in your file without one small tweak.

**Recalculation performance optimization.** If your formula is logically correct but is slowing down a large spreadsheet, the fix usually involves rethinking the data structure: switching from a full-column VLOOKUP to a lookup table with a defined range, replacing volatile functions like INDIRECT or OFFSET with direct references, or restructuring data to avoid scanning hundreds of thousands of rows. An AI tool can suggest general best practices, but the right diagnosis usually requires understanding your specific architecture -- something the tool cannot access.

## Which tool fits which situation

A practical summary before you decide:

- 
**Quick one-off formula, no friction:** Formula.dog (free tier, no account)

- 
**Complex multi-step logic:** ChatGPT with file upload, or Claude

- 
**Built into the Excel 365 ribbon:** Microsoft Copilot (subscription required)

- 
**VBA or regex alongside formulas:** Formula.dog paid tier, or ChatGPT

- 
**Heavy data analysis and dashboards:** A dedicated analytics tool (Ajelix, Coefficient)

Most people end up using two tools: one dedicated formula helper for quick syntax lookups, and a general-purpose AI for the problems that require reasoning before arriving at a formula. That combination works well in practice. Trying to find one tool that does everything usually means accepting tradeoffs in the areas you actually need most.

## FAQ

### What is an AI Excel helper?

An AI Excel helper is a tool that takes a plain-English description of what you want your spreadsheet to do and returns a working formula -- XLOOKUP, SUMIF, INDEX-MATCH, or others -- along with an explanation of how it works. Some tools also generate VBA snippets, regex patterns, and Google Sheets formulas.

### Is Formula.dog free to use?

Yes. Formula.dog has a free tier that gives you five formulas per day with no account or credit card required. Paid options start at a one-time $5 pack of 100 formulas (no expiry) or $8 per month for unlimited access with formula history and bookmarks.

### Can I use ChatGPT as an AI Excel helper?

Yes, ChatGPT works well for formula generation, especially for complex multi-step logic where you need to reason through the problem before arriving at a formula. It can be slower than dedicated tools for simple one-off lookups due to narrative formatting and occasional over-hedging. The file upload feature on paid plans is useful for formulas that depend on your specific data structure.

### Does Formula.dog work with Google Sheets?

Yes. Formula.dog supports Google Sheets formulas including ARRAYFORMULA, QUERY, IMPORTRANGE, and other Sheets-specific functions. It handles both Excel and Google Sheets without requiring you to specify which platform each time.

### When should I ask for VBA instead of a formula?

Ask for VBA when you need to loop through rows and take action, automate a sequence of multiple operations, or run a task on demand rather than on every recalculation. Use a formula when the output should stay linked to live data and update automatically. If you describe a sequence of steps (do X, then for each row do Y), VBA is usually the cleaner solution.

### Can an AI Excel helper debug an existing formula?

Partially. AI tools can identify common patterns that cause errors and suggest likely fixes. However, since they cannot see your actual spreadsheet data or structure, their diagnosis is based on your description alone. For inherited formulas with complex dependencies, treat AI suggestions as hypotheses to test, not final answers.

### What AI Excel helper works best for Microsoft 365 users?

Microsoft Copilot is built directly into the Excel ribbon for Microsoft 365 subscribers and has gained significant capability since Agent Mode launched in early 2026. It can create formulas, build pivot tables, and analyze data without leaving Excel. Copilot requires an active Microsoft 365 Copilot subscription on top of a standard Microsoft 365 plan.

---

### Excel Formulas for Beginners: 9 That Actually Work

URL: https://formula.dog/journal/excel-formulas-for-beginners

> Nine essential Excel formulas with syntax, real examples, and common error fixes. Works in Excel 2016, Excel 365, and Google Sheets where they differ.

The nine excel formulas for beginners that actually matter are SUM, AVERAGE, COUNT, IF, VLOOKUP, XLOOKUP, SUMIF, COUNTIF, TRIM, and CONCAT. Learn those nine and you will handle roughly 80% of what a spreadsheet throws at you. Each section below gives you the syntax, a real working example, and the one thing that makes it break silently.

Works in Excel 2016, Excel 2019, Excel 365, and Google Sheets. Version differences are flagged where they exist.

## SUM, AVERAGE, and COUNT: the three formulas you will type every day

These three do exactly what they say.

`=SUM(A1:A10)`Adds every value from A1 to A10. You can also add non-contiguous ranges:

`=SUM(A1:A10, C1:C5)`Add numbers from two separate column sections in one call. No need to add them in a helper column first.

`=AVERAGE(B2:B20)`Arithmetic mean. One thing worth knowing: AVERAGE ignores blank cells but includes cells containing zero. If you have empty months in a sales table, AVERAGE skips them. If those empty months are filled with 0, it counts the zeros. Choose your fill strategy before you build the formula.

`=COUNT(A1:A100)`Counts numeric cells only. For a mix of text and numbers, use COUNTA:

`=COUNTA(A1:A100)`Any non-empty cell counts. This is what you want when your column has labels and numbers mixed together. COUNT alone would skip every text entry and give you a lower number than you expect.

The three together cover nearly every aggregation task a beginner will face: adding up totals, finding averages, and counting rows. If you know nothing else yet, start here and build from this foundation.

![Person typing Excel formulas on a laptop with a colorful spreadsheet on screen](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-08/94b579-inline1.webp)

## IF: let your spreadsheet make a call for you

IF checks a condition and returns one value when true, another when false.

`=IF(logical_test, value_if_true, value_if_false)`A classic use case: a sales table where you want to flag anyone who hit quota.

`=IF(B2>=10000, "Hit", "Miss")`If B2 is 10,000 or more, the cell shows "Hit". If not, "Miss".

You can nest IFs for multiple conditions:

`=IF(B2>=20000, "Excellent", IF(B2>=10000, "Hit", "Miss"))`Three tiers, two levels of nesting. Keep it at two levels maximum. Beyond that, switch to IFS (available in Excel 2019+, Excel 365, and Google Sheets):

`=IFS(B2>=20000, "Excellent", B2>=10000, "Hit", TRUE, "Miss")`The last condition is TRUE, which acts as a catch-all (the equivalent of an else). Cleaner to read, easier to update when the quota changes next quarter.

The mistake that kills nested IFs: unbalanced parentheses. Count your opening brackets. You need the exact same number of closing ones. Excel underlines the problem in red if you get it wrong, so at least it is obvious when you are off.

IF also composes cleanly with other formulas. You will use it inside IFERROR later to handle errors gracefully, and you can nest it with AND or OR to test multiple conditions at once.

## VLOOKUP: how to pull data from another table

VLOOKUP scans the first column of a range and returns a value from another column in the same row.

`=VLOOKUP(lookup_value, table_array, col_index_num, range_lookup)`Example: employee IDs in column A, salary table on a separate sheet. You want the salaries pulled into your main view.

`=VLOOKUP(A2, Salaries!A:C, 3, FALSE)`Breaking that down:

- 
`A2` is the ID you are looking up

- 
`Salaries!A:C` is the reference table on another sheet, and the lookup column must always be the first column of this range

- 
`3` tells VLOOKUP to return the value from the 3rd column of that range

- 
`FALSE` means exact match

Use FALSE. Always. The fourth argument defaults to TRUE if you leave it blank, which enables approximate match. That can return wrong results quietly, with no error message to alert you. It is the most common VLOOKUP mistake and it takes about 20 minutes to find when it happens in a real file.

Biscuit l'a déjà cherchée pour vous. But in all seriousness: this is the formula that makes people realize spreadsheets are actually worth learning properly. VLOOKUP alone will save you hours of copy-pasting between sheets.

## XLOOKUP: worth learning if you are on Excel 365

XLOOKUP is available in Excel 2021+ and Excel 365, and in Google Sheets. It solves VLOOKUP's main limitation: the lookup column no longer has to be the first column of your range.

`=XLOOKUP(lookup_value, lookup_array, return_array, if_not_found)`The same salary lookup, XLOOKUP style:

`=XLOOKUP(A2, Salaries!A:A, Salaries!C:C, "Not found")`More readable. The fourth argument replaces ugly #N/A errors with a message you control. You can also search from the bottom up or return multiple columns at once.

If you are on Excel 2016 or Excel 2019, XLOOKUP is not available. Use VLOOKUP or learn INDEX-MATCH, which works in any direction on any Excel version. INDEX-MATCH has a steeper learning curve but never limits you to left-first columns.

For new spreadsheets started on Excel 365, XLOOKUP is the better default. For files that need to open on older versions, stick with VLOOKUP.

## SUMIF and COUNTIF: add or count only what matches

SUMIF adds values in a range, but only for rows where a condition is met:

`=SUMIF(range, criteria, sum_range)`Example: sum all sales where the region column says "North".

`=SUMIF(C2:C100, "North", D2:D100)`COUNTIF counts how many cells match a condition:

`=COUNTIF(C2:C100, "North")`For multiple conditions, use SUMIFS and COUNTIFS (plural):

`=SUMIFS(D2:D100, C2:C100, "North", E2:E100, ">1000")`That adds all sales in the North region where the order value exceeds 1,000. SUMIFS is what you reach for when a single filter is not enough.

SUMIF returning 0 when it should not: this is almost always a formatting issue. If your number column values are left-aligned in their cells, they are being stored as text. Reformat the column to Number and the SUMIF result will correct itself immediately. This is the formula equivalent of Biscuit coming back with the wrong stick -- the data looks right but something is off at the type level.

COUNTIF is equally useful for checking for duplicates:

`=COUNTIF(A:A, A2)`If this returns a value greater than 1 for any row, that ID appears more than once.

![Golden retriever dog sitting beside a desk with a laptop showing a spreadsheet, attentively helping with work](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-08/077d34-inline2.webp)

## Text formulas that save you from manual cleanup: TRIM, CONCAT, LEFT

If you have ever imported data from a CRM, an ERP, or a CSV export, you know the problem: invisible spaces before values, names split across two columns, product codes with extra characters at the start. These formulas clean that up.

TRIM strips leading, trailing, and extra internal spaces:

`=TRIM(A2)`If VLOOKUP keeps returning #N/A even when the value is visibly in the table, run TRIM on your lookup value. Extra spaces are the invisible culprit in most of those cases. Wrap your lookup in TRIM and the match will work.

CONCAT joins values from multiple cells:

`=CONCAT(A2, " ", B2)`First name in A2, last name in B2, a space character in the middle. In Excel 2016, use CONCATENATE instead (same behavior, older function name). TEXTJOIN handles a full list more cleanly:

`=TEXTJOIN(", ", TRUE, A2:A10)`The TRUE argument tells it to skip empty cells in the range. TEXTJOIN is Excel 2019+ and Excel 365 only. In Google Sheets, it works fine in all versions.

LEFT, RIGHT, and MID extract characters from a string:

`=LEFT(A2, 3)`Returns the first 3 characters from the value in A2.

`=RIGHT(A2, 4)`Returns the last 4 characters.

`=MID(A2, 2, 5)`Returns 5 characters starting at position 2.

Useful when product codes or account numbers embed category info you need to parse out without modifying the original data column.

![Flat lay of a desk with an open notebook showing hand-drawn data diagrams, colored pens and sticky notes](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-08/4ae55c-inline3.webp)

## What your error code is actually telling you

Error codes are not failures. They are messages. A spreadsheet returning an error is doing its job: it found a problem and it is telling you exactly what kind of problem it is.

Here is what each one means and what to do about it:

`#N/A` means VLOOKUP or XLOOKUP could not find the lookup value in the table. Check for typos, extra spaces (use TRIM), or a text-versus-number mismatch where the lookup value is a number but the table column stores text or vice versa.

`#DIV/0!` means the formula is dividing by zero or by a blank cell. Wrap the formula with IFERROR to handle it gracefully:

`=IFERROR(A2/B2, 0)``#VALUE!` means the formula received text where it expected a number. Check the data type of your input cells.

`#REF!` means a referenced cell no longer exists because you deleted a row or column that the formula pointed to. Open the formula bar, find the broken reference, and update it.

`#NAME?` means Excel does not recognize the function name. Check the spelling, or confirm the function is available in your version of Excel. XLOOKUP spelled wrong becomes XLOKUP and returns #NAME?.

IFERROR is the general solution for making errors display as something readable:

`=IFERROR(VLOOKUP(A2, Salaries!A:C, 3, FALSE), "Not found")`If the VLOOKUP finds nothing, you see "Not found" instead of #N/A. Works in Excel and Google Sheets. XLOOKUP builds this directly into its fourth argument, which is one more reason to use it when you can.

## Should you let an AI write the formula instead?

If you know what you want but not the exact syntax, yes. Describing your problem in plain English and getting a working formula back in a few seconds is faster than 10 minutes of searching. That is what Formula.dog does: describe the spreadsheet task, get the formula, paste it in. No sign-up required for the first few uses.

Worth letting an AI handle it:

- 
Complex SUMIFS with four or more criteria

- 
XLOOKUP with a match mode you have not used before

- 
Combining IFERROR with another function you are not sure about

- 
Any VBA snippet or regex helper you would otherwise lose an afternoon researching

Worth verifying manually afterward:

- 
Any formula that feeds a financial report or dashboard that other people rely on

- 
Results that look plausible but that you do not fully understand yet

À copier-coller directement. On vérifie ensemble. The two-second check is this: paste the formula, hit Enter, then confirm the output on a row where you already know the correct answer. If it matches, you are good to go.

Skip this if you want to learn the syntax deeply for yourself -- there is real value in understanding how VLOOKUP works rather than just running it. But if you are in a file, on a deadline, and the formula is SUMIFS with three criteria you cannot quite remember, let the AI fetch it.

## FAQ

### What is the easiest Excel formula for beginners to start with?

SUM is the simplest starting point. =SUM(A1:A10) adds up a range and the syntax is impossible to get wrong. Once you have that, IF and VLOOKUP open up most of what you will actually need day to day.

### Do these Excel formulas also work in Google Sheets?

Most of them, yes. SUM, AVERAGE, COUNT, IF, VLOOKUP, SUMIF, COUNTIF, TRIM, and CONCAT all work identically in Google Sheets. XLOOKUP is also available in Sheets. TEXTJOIN works in Sheets but not in Excel 2016. Version differences are noted in each section above.

### Why does my SUMIF return 0 when there should be a result?

The most common cause is numbers stored as text. If the values in your sum range are left-aligned in their cells, Excel is treating them as text and ignoring them. Select the column, reformat it to Number, and your SUMIF result should correct itself.

### What is the difference between COUNT and COUNTA?

COUNT only tallies cells that contain numbers. COUNTA counts any non-empty cell, including text. Use COUNTA when your range contains a mix of labels and numbers and you want to count all filled cells regardless of type.

### Is XLOOKUP better than VLOOKUP?

For Excel 365 and Excel 2021+ users, yes. XLOOKUP is more flexible (no requirement for the lookup column to be first), handles errors more cleanly with a built-in if_not_found argument, and can search in any direction. If you are on Excel 2016 or 2019, XLOOKUP is not available and VLOOKUP remains your main option.

### How do I stop seeing #N/A errors in my VLOOKUP?

Wrap your VLOOKUP in IFERROR: =IFERROR(VLOOKUP(A2, Table!A:C, 3, FALSE), "Not found"). If you are using XLOOKUP, use its fourth argument: =XLOOKUP(A2, Table!A:A, Table!C:C, "Not found"). Both return your chosen message instead of an error code when no match is found.

### What is the fastest way to get an Excel formula without memorizing the syntax?

Describe your problem in plain English to Formula.dog and it returns the correct formula with the right syntax. Useful when you know what you want but cannot remember which argument goes where, or when you need a complex SUMIFS or nested IF that would take several minutes to build by hand.

---

### Build an Objective Summary Formula in Excel or Sheets

URL: https://formula.dog/journal/objective-summary-formula-excel-sheets

> One formula writes the objective summary for you: totals, counts and a last-updated date, pulled live from your Excel or Sheets data every time it changes.

An objective summary of a spreadsheet is one line built entirely out of formulas: no adjectives, no judgment calls, just totals, counts and a last-updated date pulled straight from your data. You can build the whole thing with TEXTJOIN wrapped around SUMIFS, COUNTIFS and MAX. Below is the exact formula, why it beats retyping the same recap every Monday morning, and where Excel and Sheets quietly go their separate ways on it.

Biscuit went looking for "objective summary" tutorials before writing this, and almost all of them are about summarizing a meeting or an essay: strip your opinions, keep the facts, three paragraphs max. Good advice for a document. Useless for a spreadsheet, because nobody's paragraph regenerates itself when row 4,102 gets added tomorrow morning. A formula does.

## Why Most "Objective Summary" Advice Falls Apart on a Spreadsheet

Search the phrase and you'll find the same seven-step list everywhere: read the whole thing, find the main idea, cut the opinions, rewrite it in your own words, check it's still neutral. Fine advice for turning a report or a call into a paragraph. It assumes a human writes the summary once, from a text that already exists.

A weekly sales recap doesn't work that way. The "text" is a table that changes every day. Somebody has to reread it, requalify it and rewrite the same three sentences on a schedule, forever. Do that for six months and the phrasing starts drifting: this week's summary calls a dip "a slight softening," last month's called the same size dip "a concerning trend." Same data, different adjectives, because a person picked the words both times. That's not objective anymore. That's mood.

A formula can't have a mood. It reads `SUM`, `COUNTIF` and `MAX` off the same cells every single time, so the wording never creeps even when the numbers do. That's the part the generic "how to summarize" guides miss entirely: for recurring data, objectivity is a property of *who* (or what) regenerates the sentence, not just how carefully the first draft was worded.

## The One-Line Test For "Is This Summary Actually Objective?"

If a human has to retype it, it's not objective, it's a guess dressed up as a fact. If a formula pulls it straight from the cells, it's objective by construction: it can only say what the data says.

## Build the Formula: SUMIFS, COUNTIFS and TEXTJOIN Doing the Talking

Say you've got a table with columns for Region, Status and Amount, and someone keeps asking "can you just give me the summary" every Friday. Here's the cell that answers before they ask:

`=TEXTJOIN(" ", TRUE, "Total:", TEXT(SUM(Amount), "$#,##0"), "| Open:", COUNTIF(Status, "Open"), "| Last entry:", TEXT(MAX(Date), "mmm d"))`Argument by argument:

- 
`" "` : the delimiter between chunks. A space keeps it readable as one sentence.

- 
`TRUE` : ignore empty cells so a half-filled row doesn't leave a stray gap.

- 
Everything after that is a pair of a label and a live value: `SUM`, `COUNTIF`, `MAX` doing the actual counting.

Paste it into one cell, point it at your ranges, and you get something like: `Total: $84,200 | Open: 12 | Last entry: Jul 22`. Nobody wrote that sentence. The data did. Change one row and the summary updates itself before you've finished your coffee.

Want it to react to more than one condition, like "West region only"? Swap `COUNTIF`/`SUM` for `COUNTIFS`/`SUMIFS` and add the extra criteria pair:

`=SUMIFS(Amount, Region, "West", Status, "Open")`That's the formula that goes inside the TEXTJOIN once you need to slice by more than one column.

![Close-up of hands typing on a laptop with a blurred spreadsheet grid on screen](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-07/69d81f-inline1.webp)

If describing the columns in plain English is faster than remembering `TEXTJOIN`'s argument order at 5pm on a Friday, that's exactly the situation Formula.dog exists for. Describe the table, get the formula back, paste it in. We checked and it handles this exact TEXTJOIN-plus-SUMIFS combo without blinking.

One warning worth taking seriously: if any of the ranges inside `TEXTJOIN` are themselves array results (like a `FILTER` output) on an older, non-365 Excel, you may need `Ctrl+Shift+Enter` instead of a normal Enter. Skip that step and the formula returns the first value only, silently, no error message, which is the spreadsheet equivalent of Biscuit coming back with an empty mouth and a low tail.

## Excel vs Sheets: Where the Objective Summary Formula Diverges

The `TEXTJOIN` skeleton above works in both, argument for argument. Where they split is the age of the feature and a few naming quirks.

- 
**`TEXTJOIN`**: Excel 2019 and 365 only, not 2016. Available in every current version of Sheets.

- 
**`COUNTIFS` / `SUMIFS`**: All modern versions of both.

- 
**Dynamic array spill (`UNIQUE`, `FILTER`)**: Excel 2021 / 365 only. Sheets has had it available for longer, no separate license needed.

- 
**Row ceiling**: 1,048,576 rows in Excel. Sheets caps at about 10 million cells total across the sheet, which limits rows far lower on wide tables.

If your team is still on Excel 2016, the `TEXTJOIN` version of this formula won't work; you'll need the older, clunkier `CONCATENATE` plus `&` chain instead, which does the same job with worse readability. [Microsoft's own documentation](https://support.microsoft.com/en-us/office/textjoin-function-357b449a-ec91-49d0-80c3-0e8fc845691c) is worth a bookmark for the exact version cutoff before you promise this formula to a coworker on an old license.

## What About UNIQUE and GROUPBY? (And Why They Won't Save You on Excel 2016)

`UNIQUE` paired with `SUMIFS` builds a full summary table instead of a single sentence: one row per category, auto-updating as new categories show up in the source data. `GROUPBY` goes further and collapses the whole thing into one formula, but it's Microsoft 365 only, rolled out gradually enough that some business licenses still don't have it in mid-2026. Sheets doesn't have a `GROUPBY` equivalent; `QUERY` covers similar ground with SQL-flavored syntax instead.

None of these three replace the TEXTJOIN sentence above. They solve a different problem: a whole table of objective facts instead of one line of them. Use the sentence for a status update in a shared doc. Use `UNIQUE` + `SUMIFS` when someone actually needs the breakdown, region by region, without opening a pivot table and remembering which filters were set last time.

A quick real-world case: an ops analyst tracking support tickets across five regions used to keep a separate mini-table updated by hand, one row added per new region, formulas copied down manually every time. Swapping to `=UNIQUE(Region)` next to `=SUMIFS(Tickets, Region, H2#)` (spilling down from the unique list) meant a sixth region showing up in the raw data just appeared in the summary table on its own, no copy-down, no forgotten row.

![Two laptops side by side on a desk, each showing a different blurred spreadsheet grid, representing Excel versus Sheets](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-07/1e428f-inline2.webp)

Once the summary cell exists, a lot of teams paste the result into a wiki page every week by hand, which reintroduces the exact copy-paste lag the formula was built to avoid. If your recap already lives in Notion, Notion AI can pull the number in through an embed instead of someone retyping it there too.

## If You Actually Meant "Summarize My Meeting," You're in the Wrong Kennel

Most of the "objective summary" articles ranking right now, including one from a meeting-notetaker company, are about turning a conversation into a neutral paragraph: no opinions, no "I think," just what was said. That's a real, different problem, and a spreadsheet formula won't touch it.

If you came here looking for that, a transcription tool built for calls is the right fetch, not a formula generator built for cells. Come back once the meeting produces numbers that need summarizing.

## Reporting Weekly? Make the Summary Regenerate Itself So Nobody Rewrites It

![Flat lay of a weekly planner, coffee cup and a golden retriever paw at the edge of a tidy desk](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-07/efd014-inline3.webp)

Picture an ops team of four, rotating who "does the Friday update" in Slack. Whoever draws the short straw that week scrolls the sheet, eyeballs the totals and types a summary that's roughly right. Three different people, three slightly different summaries, none of them wrong exactly, all of them shaped a little by whoever was typing.

The actual point of building this as a formula instead of a habit: a habit breaks the week someone's on vacation, or rushed, or new to the sheet and unsure which column means what. A cell doesn't take vacation, doesn't rush and doesn't guess at column meanings. Whoever's on Friday-update duty just screenshots the top row.

Three ways to make it stick:

- 
Put the `TEXTJOIN` cell at the very top of the sheet, above the raw data, so it's the first thing anyone sees when the file opens.

- 
Name the cell (`Formulas > Define Name`) something like `WeeklyObjectiveSummary` so it survives someone inserting a row above it.

- 
If the summary needs to travel outside the sheet (Slack, email, a status doc), link to the cell instead of copying its current text: `='[Report.xlsx]Sheet1'!$B$2` pulls the live value, a pasted string doesn't.

For anyone drafting the surrounding report by hand and just wants a faster first pass at the prose around the numbers, general-purpose writing assistants like ChatGPT can turn the raw `TEXTJOIN` output into a sentence or two of context. Worth being precise about the division of labor though: the formula is the source of truth, the AI is only dressing it up in words afterward.

## So, Would We Actually Use This Formula Ourselves?

Yes, for anything that gets asked about weekly: sales totals, open tickets, a headcount that changes every sprint. The setup cost is one formula, once. The payoff is every future Friday where nobody has to write "here's where things stand" from scratch.

Where we'd skip it: a one-off report nobody's going to ask about again. Writing a `TEXTJOIN` formula for a summary you'll read exactly once is more setup than a plain sentence typed by a person who already knows the numbers. Objective doesn't mean automatic is always better, it means the summary should say only what the data actually supports, whether a formula wrote it or you did.

Five minutes with `TEXTJOIN`, `SUMIFS` and a name box beats another Friday spent re-typing the same three sentences with slightly different adjectives. Good boy, formula. Go fetch the numbers.

## FAQ

### What's the difference between an objective summary and a regular summary?

A regular summary can include interpretation: what something means, whether it's good or bad. An objective summary sticks to what's directly verifiable: totals, counts, dates, nothing inferred. In a spreadsheet, that distinction maps cleanly onto formulas versus prose: SUM and COUNTIF can only report facts, they can't editorialize.

### Can a spreadsheet formula actually be objective?

Yes, arguably more objective than a person writing the same recap by hand. A formula like SUMIFS or COUNTIF returns the same result every time given the same data, with no drift in wording or emphasis from one week to the next. The only subjectivity left is in choosing which numbers to include, which happens once, when you build the formula.

### What Excel formula creates an objective summary of data?

TEXTJOIN wrapped around SUMIFS, COUNTIFS and MAX, joined with a delimiter, builds a single sentence-style summary cell. For a full table instead of one line, pair UNIQUE with SUMIFS, or use GROUPBY on Microsoft 365.

### Does Google Sheets support the same objective summary formula as Excel?

TEXTJOIN, SUMIFS and COUNTIFS all work the same way in Sheets. The main gap runs the other direction: Sheets has had UNIQUE and array-friendly functions for longer than Excel, since Excel only got dynamic array spill in the 2021/365 releases. GROUPBY has no direct Sheets equivalent; QUERY covers similar ground.

### What if I need an objective summary of a meeting, not a spreadsheet?

That's a different tool for a different job. A transcription and meeting-notes app built for calls will do that better than any spreadsheet formula. Formula.dog and this approach are built for tabular data, not conversations.

### How long should an objective summary be?

For a written recap, one to three sentences is typical. For a spreadsheet built with TEXTJOIN, aim for one line: enough facts to answer 'where do things stand' without needing a second cell to summarize the summary.

### Can AI write an objective summary for me automatically?

AI can help you write the formula that generates the summary, which is more reliable than asking AI to write the summary text itself each time, since a generated formula stays accurate as the data changes and a generated paragraph doesn't.

---

### Track Action Items in Excel or Sheets (Free Formulas)

URL: https://formula.dog/journal/track-action-items-excel-sheets

> A practical action items tracker for Excel and Google Sheets: the columns that matter, the checkbox trick, and the formula that flags overdue items automatically.

Action items die in three places: the meeting notes nobody reopens, the Slack thread that scrolls away, and the spreadsheet that never gets a second look. The fix isn't a fancier tool. It's a tracker with six columns, a checkbox that means something, and one formula that flags what's late before you have to ask. Below is the exact setup, in Excel and in Google Sheets, plus the formulas that keep it honest.

## Your action items list needs six columns, not sixty

Most action item spreadsheets fail because they try to be a project management tool. They aren't. A good tracker answers four questions at a glance: what needs doing, who owns it, when it's due, and whether it's done. That's it.

- 
**Action item**: verb-led description ("Send revised budget to finance")

- 
**Owner**: one name. Two names means zero accountability.

- 
**Due date**: a real date, not "next week"

- 
**Status**: Open / In progress / Done

- 
**Priority**: High / Medium / Low, used sparingly

- 
**Notes**: why it's stuck, if it's stuck

Six columns. Resist the urge to add a "project phase" dropdown or a color-coded department tag on day one. If a spreadsheet needs a legend to be readable, it needs fewer columns instead.

Here's what one filled row looks like once the sheet is live: "Send revised budget to finance" / Rafael / 2026-07-21 / Open / High / "Waiting on Q3 actuals from ops first." Nothing clever, but every column earns its place, and anyone opening the file cold understands the state of that item in about two seconds.

Skip the Notes column and you'll regret it inside a month. It's the one field that turns "still open" from a mystery into an answer. Without it, someone always has to ping the owner to ask what's actually going on, which defeats the point of having a shared tracker in the first place.

## Turn checkboxes into your status column

Skip a text dropdown for the "Done" state and use a real checkbox instead. It's faster to click, and it plays nicely with formulas because a checked box evaluates to TRUE (or 1) and an unchecked one evaluates to FALSE (or 0).

**In Google Sheets:** select the range, then Insert > Checkbox. Checked = TRUE, unchecked = FALSE, by default.

**In Excel (365):** select the range, go to Insert > Checkbox (native checkboxes shipped in 2024; older versions need a Developer-tab form control instead). Checked = TRUE, unchecked = FALSE, same as Sheets.

Once the checkbox exists, add a strikethrough for anything marked done. In both apps: select your action item column, open conditional formatting, choose "custom formula," and enter:

`=$D2=TRUE`(assuming column D holds the checkbox). Apply strikethrough as the format. Done items visibly cross themselves off. Nobody has to delete a row to know it's handled.

![Hand checking a checkbox on a laptop action items tracker](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-07/ce7ed7-inline1-checkbox.webp)

If you want the mechanics behind why this works, [Exceljet's guide to native checkboxes in Excel](https://exceljet.net/articles/native-checkboxes-in-excel) walks through the TRUE/FALSE logic in more depth than most tutorials bother with.

Checkboxes also happen to be the fastest input on a phone. Tapping a small square beats opening a dropdown and scrolling to "Done" every time, which matters more than it sounds like it should when half your team is updating the tracker between meetings, standing up, phone in hand.

## How many action items is too many for one person

A tracker doesn't fix a workload problem, it just makes the workload problem visible faster. If one owner shows up next to twelve rows after a single meeting, the sheet isn't broken; the meeting was.

A ratio worth borrowing from project managers who've run this experiment for years: roughly 20% of active action items marked High priority, 60% Medium, 20% Low. If every row in your Priority column says High, the column has stopped meaning anything, and people start ignoring it entirely, including the genuinely urgent ones.

The same logic applies per person. Two to three substantial action items per owner, per meeting, is a realistic ceiling. Past that number, items don't get skipped randomly, they get skipped by whoever shouts loudest in the next meeting, which is a worse way to prioritize than any spreadsheet formula.

If your Priority column has drifted to mostly High, that's a signal to reset it in the next meeting rather than a signal to add a fourth priority tier. Sit down, rank the open rows against each other honestly, and demote everything that isn't actually blocking something else. The formula stays the same either way; it's the discipline around filling in that column that decides whether the tracker means anything six weeks from now.

## The formula that turns overdue items red without you touching a thing

This is the one formula worth memorizing. It highlights an entire row when the due date has passed and the status isn't "Done":

`=AND($C2<TODAY(), $D2<>TRUE)`Column C is the due date, column D is the checkbox. Select your data range, open conditional formatting, use a custom formula, paste the line above, and set the fill to red.

The logic is simple once you see it: `TODAY()` recalculates every time the sheet opens, so "overdue" is never a stale label someone forgot to update. It's just true or false, checked live. `AND()` makes sure a completed item never turns red just because its due date has passed. That distinction is the difference between a tracker people trust and one they start ignoring by week three.

For the mechanics of writing formulas like this one, [Exceljet's piece on conditional formatting with formulas](https://exceljet.net/articles/conditional-formatting-with-formulas) is worth the ten minutes if you want to build your own variations later.

Worth noting: if your action items already come out of a recorded meeting, some notetakers (Fathom included) generate a first-draft action item list on their own. You're not typing from memory, you're copying and formatting.

## Counting what's actually done (without opening the sheet)

Add a small summary block above your table, three cells wide, no chart needed yet:

`=COUNTIF(D2:D200,TRUE)
=COUNTIF(D2:D200,FALSE)
=COUNTIFS(D2:D200,FALSE,C2:C200,"<"&TODAY())`That's completed count, open count, and overdue count, in that order. Pin them at the top of the sheet (row 1) with bold labels, and anyone glancing at the file for two seconds gets the state of the world without scrolling.

One caveat that trips people up in Excel specifically: if you're using native checkboxes on a version older than 365, the cell might store "Yes"/"No" text instead of TRUE/FALSE by default. Check what your checkbox actually writes before copy-pasting the formulas above. A quick way to verify: click an empty cell, type `=D2`, and see what comes back.

Want the numbers to update live without reopening the file? Pin those three summary cells with Freeze Panes (View > Freeze > First row, in both apps), so the count stays visible while the actual rows scroll underneath. It sounds minor, but it's the difference between a tracker someone checks once a week and one that's open in a tab all day.

## Where the action items come from before they hit your sheet

Most action items start in a meeting, get scribbled in a notes app, and lose half their detail by the time they reach a spreadsheet. AI meeting notetakers exist specifically to skip that step: they listen to the call and generate a structured action item list with owner and context already attached.

Fireflies works well if your team already lives in Zoom or Google Meet and wants action items synced straight into a CRM. It's built for sales and ops teams that need conversation history searchable later, not just a summary.

tl;dv leans toward multi-meeting search: useful if "what did we decide about this three meetings ago" comes up more often than "what's due this week." Either tool exports cleanly enough to paste straight into the six-column tracker above.

![Empty meeting room with a laptop showing an action items dashboard](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-07/de3966-inline2-meetingroom.webp)

Skip the AI notetaker if your meetings are small and infrequent. Typing four action items by hand takes less time than setting up a bot, and a small team doesn't need conversation intelligence it will never look at again.

## Excel or Sheets: does it change how you track this?

Not much, for this specific use case. The checkbox mechanics, the TODAY() logic, and the COUNTIF formulas all behave the same in both apps once you know where the menus live.

- 
**Native checkboxes**: Excel, 365 only (2024+) / Google Sheets, all versions

- 
**TODAY() behavior**: identical in both

- 
**Sharing a live tracker**: Excel needs OneDrive or SharePoint sync / Google Sheets is native, real-time by default

- 
**Mobile checkbox tapping**: clunky on Excel mobile / smooth on Sheets mobile

- 
**Older-version fallback**: Excel needs a Developer-tab checkbox control / Google Sheets doesn't need one, already universal

The one place it genuinely matters: if your team checks off action items from their phones between meetings, Sheets handles that better today. If the tracker lives inside a larger financial model already built in Excel, keep it there. Don't rebuild a perfectly good workbook in a different app just for this.

One version note worth flagging before you copy any formula from this page: teams still running Excel 2016 or 2019 won't have native checkboxes at all, and `TODAY()` and `COUNTIFS` behave identically across every version, so only the checkbox step needs a workaround (the Developer-tab form control mentioned above). Nothing else in this tracker depends on a 365-only feature.

![Golden retriever looking at a laptop screen on a home office desk](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-07/6c72bd-inline3-biscuit-portrait.webp)

## Should you build this yourself or let Biscuit fetch the formula?

Building the tracker above takes about ten minutes once you've done it once. Copy the six columns, paste the two conditional formatting formulas, add the three COUNTIF cells, and you have a working system that updates itself every time someone checks a box.

Worth building it yourself if you want it to match an existing sheet's formatting, or if you're the kind of person who wants to understand exactly why the red highlight fires. Worth grabbing a pre-built template instead if you just need something working before your next meeting starts in twenty minutes.

Either way, the formulas don't change. Biscuit has already fetched every variation of `AND(due date, TODAY())` and `COUNTIFS` you're likely to need. If your version looks different from what's above, tell him what's in your columns and he'll bring back the exact syntax for it.

## FAQ

### What's the best way to track action items in Excel?

Use a six-column table (action item, owner, due date, status, priority, notes), a native checkbox for the status column, and one conditional formatting formula that turns a row red when the due date has passed and the box isn't checked.

### How do I make a checklist in Google Sheets with checkboxes?

Select the range you want, then go to Insert > Checkbox. Each checked box evaluates to TRUE and each unchecked box to FALSE, which you can reference directly in COUNTIF or conditional formatting formulas.

### What formula highlights overdue action items automatically?

In conditional formatting, use a custom formula like =AND($C2<TODAY(), $D2<>TRUE), where column C holds the due date and column D holds the checkbox. It recalculates every time the sheet opens, so overdue items are never a stale manual label.

### How many action items should one person have per meeting?

Two to three substantial items per owner is a realistic ceiling. Past that, items stop getting done in priority order and start getting done in whatever order gets shouted about loudest in the next meeting.

### Can AI meeting notetakers generate action items automatically?

Yes. Tools like Fathom and Fireflies AI transcribe a call and output a structured action item list with owner and context already attached, which you can copy straight into a spreadsheet tracker instead of typing from memory.

### What's the difference between an action item and a task?

An action item usually comes out of a specific meeting or decision and has an implied deadline tied to that context. A task can exist independently of any meeting. In practice, most action item trackers just need an owner and a due date to function well regardless of the label.

### Should I use Excel or Google Sheets for a shared action items tracker?

Google Sheets is generally easier for real-time shared editing and mobile checkbox tapping. Excel makes sense if the tracker needs to live inside a larger workbook or financial model that's already built there. The checkbox and formula logic works identically in both.

---

### Code Refactoring Techniques for Cleaner Spreadsheets

URL: https://formula.dog/journal/code-refactoring-techniques-cleaner-spreadsheets

> Messy spreadsheet code slows you down and breaks under pressure. These code refactoring techniques fix that fast, with examples you can apply today.

Code refactoring techniques let you clean up what already works without breaking it. In a spreadsheet context, that means taking a formula that does the right thing but looks like it was written at 11pm on a deadline, and making it something you'd actually want to open again next quarter.

Biscuit l'a déjà cherchée pour vous. Here's what actually moves the needle.

## Your formula works, so why does it feel wrong?

The classic sign you need to refactor: you open a file you wrote six months ago and spend three minutes reading a single cell before you understand what it does. Or you copy a formula to a new column and it silently breaks because there was a hardcoded row reference buried inside.

Refactoring doesn't change the output. It changes the structure so the output stays correct when things around it change, new rows, new columns, a renamed sheet.

Skip this if: your file is a one-time calculation that nobody else will touch. Refactoring has a cost (time, disruption), and if the benefit is zero, so is the ROI.

Worth it when: multiple people use the file, you update it regularly, or formulas chain together across several sheets.

Some warning signs worth acting on:

- 
A formula wider than the column at 100% zoom

- 
More than two levels of nested IF

- 
Hardcoded numbers appearing in more than three places

- 
Colleagues asking you to explain what a cell does instead of reading it themselves

Any one of these is enough to schedule a refactoring pass.

![Close-up of clean organized spreadsheet on laptop screen with color-coded cells](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-06/2cc0d7-inline1.webp)

## Extract Method: break one formula into named pieces

This is the single most useful refactoring technique, in spreadsheets as much as in code. The idea: if one formula does three things, split it into three cells, one per step, then combine the results.

**Before (one cell doing everything):**

`=IF(AND(A2<>"",DATEDIF(A2,TODAY(),"Y")>30),"Senior","Junior")`**After:**

- 
Cell `C2`: `=DATEDIF(A2,TODAY(),"Y")`, named "Age in years"

- 
Cell `D2`: `=AND(A2<>"",C2>30)`, named "Is senior?"

- 
Cell `E2`: `=IF(D2,"Senior","Junior")`, the final output

Voilà ce que ça donne dans une vraie cellule. Each step is readable on its own. If the threshold changes from 30 to 25, you change one number in one cell. If the DATEDIF breaks because a date is missing, you see exactly where.

The trade-off: you use more columns. On a wide spreadsheet, that can feel wasteful. Use a helper column area on a separate sheet if column space is tight. Name the sheet something like "Helpers" or "Calcs" so the organization is immediately clear to anyone opening the file.

Works in Excel and Sheets the same way, there is no version restriction on using helper cells.

## Replace Temp with Query: stop storing what you can calculate

A temp variable in spreadsheet terms is a cell you fill with an intermediate value that nothing else references directly, you just needed it to get to the next step.

Sometimes these are useful (see above). But when you have a chain of five helper cells where only the last one matters, and the intermediate ones never change, you can collapse them into a single formula.

**Three helper cells that build toward one result:**

- 
`=B2*C2`, subtotal

- 
`=D2*0.2`, tax amount

- 
`=D2+E2`, total

**Collapsed:**

`=(B2*C2)+(B2*C2*0.2)`Or with a named range for the tax rate:

`=B2*C2*(1+TaxRate)`The rule: if a helper cell is only ever consumed by exactly one other cell, ask whether that formula is short enough to inline. If yes, inline it. If not, keep the helper and name it properly.

Where to draw the line: a formula that runs past 80 characters is usually too long to inline. At that point, the Extract Method approach above serves you better. Keep helpers when they genuinely aid readability; remove them when they are just noise.

## Encapsulate Field: protect the inputs that shouldn't change

In spreadsheets, encapsulation means keeping your fixed inputs, rates, thresholds, reference values, in one place instead of scattered as hardcoded numbers inside formulas.

C'est la formule que tout le monde oublie et que tout le monde cherche.

A VAT rate hardcoded as `0.2` in 47 formulas across a workbook is a maintenance trap. Change the rate and you need to find all 47. Miss three and you have a calculation error.

**Fix:**

- 
Create a `Settings` sheet with a cell named `VATRate = 0.2`

- 
Reference it in every formula: `=B2*VATRate`

- 
When the rate changes, update one cell. Everything else follows.

This also applies to date references (today's date as a fixed anchor), currency multipliers, and category thresholds. If a value appears more than twice and could ever change, it belongs in a named reference.

**How to create named ranges:**

- 
Excel: Formulas tab > Name Manager > New

- 
Google Sheets: Data > Named ranges

The naming convention matters. `TaxRate` is clear. `TR` is not. `tmp_3` is not. Use names that someone who didn't write the formula can understand in three seconds.

![Professional analyst reviewing printed spreadsheet pages on a desk with pen in hand](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-06/c48a77-inline2.webp)

## Eliminate duplication: the DRY principle for formulas

[DRY, Don't Repeat Yourself](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) is one of the most cited principles in software engineering, and it applies directly to spreadsheets. If you have copied the same VLOOKUP across 15 columns with minor variations, you have a maintenance problem waiting to happen.

Two approaches depending on your situation:

**Excel 365 / Google Sheets:** Use XLOOKUP or INDEX-MATCH with array expansion to pull multiple columns in a single formula.

`=XLOOKUP(A2,LookupTable[ID],LookupTable[[Name]:[Status]])`This returns both Name and Status in one go, no copy-pasting across columns.

**Older Excel (2016 or earlier):** Create a single MATCH call in a helper cell, then use INDEX referencing that position:

- 
`G2`: `=MATCH(A2,LookupTable[ID],0)`, one MATCH for all columns

- 
`H2`: `=INDEX(LookupTable[Name],G2)`

- 
`I2`: `=INDEX(LookupTable[Status],G2)`

You still reference the same MATCH result everywhere. If the lookup column changes, you update one formula.

A version note worth making: XLOOKUP arrived in Excel 2019 for enterprise subscribers and Excel 365. If your team uses Excel 2016, the INDEX-MATCH approach is the one to use. Sheets supports XLOOKUP as of 2022 on all plans.

## Replace Conditional with something cleaner

Nested IFs are where spreadsheets go to become unreadable. Three levels deep and you've lost most readers, including yourself in six months.

**Before (nested IF chain):**

`=IF(A2>10000,"A",IF(A2>5000,"B",IF(A2>1000,"C","D")))`**Option 1: IFS (Excel 2016+ / Sheets)**

`=IFS(A2>10000,"A",A2>5000,"B",A2>1000,"C",TRUE,"D")`Flatter, but still four conditions in one formula. Acceptable.

**Option 2: VLOOKUP with a lookup table (the underrated approach)**

Create a small reference table:

- 
10001 and above: Category A

- 
5001 to 10000: Category B

- 
1001 to 5000: Category C

- 
0 to 1000: Category D

Then: `=VLOOKUP(A2,ThresholdTable,2,TRUE)`

The TRUE (approximate match) walks down the sorted table and returns the last category that fits. The logic is now in the table, not buried in the formula. Change a threshold? Edit one row in the table.

Worth the splurge: the lookup table approach, it makes the logic auditable and visible to anyone, even people who don't read formulas.
Skip if you're in a hurry: IFS is fine for three conditions or fewer.

The SWITCH function is another option available in Excel 2019+ and Sheets, useful when you're matching exact values rather than ranges. It reads more cleanly than IFS for exact-match cases.

## The Substitute Algorithm: when you'd rather rewrite than fix

Sometimes the formula is not wrong, it's just the wrong approach entirely. You inherited a 200-character formula concatenating text with CONCATENATE and &, and you need to add one more field. The right move is not to extend it. It's to rewrite it with TEXTJOIN.

**Before:**

`=A2&" | "&B2&" | "&C2&" | "&D2`**After:**

`=TEXTJOIN(" | ",TRUE,A2:D2)`Si votre tableau change de tête demain, cette formule suit. TEXTJOIN handles empty cells, handles arrays, and will not break when you add column E.

Same logic applies to:

- 
Replacing VLOOKUP with XLOOKUP when you need exact match + missing value handling

- 
Replacing IFERROR wrapping with native error-handling in newer functions

- 
Replacing array-entered Ctrl+Shift+Enter formulas with native dynamic arrays in Excel 365

The same principle scales up: if you're maintaining a large data pipeline inside a spreadsheet that has grown into a tangle of INDIRECT references, external connections, and named ranges pointing at named ranges, sometimes the right refactoring move is to pull the logic out into a proper tool (SQL, Python, Power Query) and use the spreadsheet only for display. That's a bigger decision, but it belongs in the same category.

![Two colleagues collaborating at a whiteboard with flow diagrams during a code review session](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-06/c94a4d-inline3.webp)

## Before you start: the three things you need in place

Code refactoring techniques only work if you do not break anything you cannot recover from. In a spreadsheet context, that means:

- 
**A backup copy.** Before any refactoring session, save a dated copy of the workbook. Not a Save As to the same folder, a separate location (cloud backup, email to yourself, whatever). You'll thank yourself the one time something goes wrong.

- 
**Know what the current outputs should be.** Before changing anything, note the key outputs: totals, summary figures, key cell values. Compare them to the same cells after each change. A 10-second check that catches regressions immediately.

- 
**One change at a time.** Do not Extract Method, encapsulate three named ranges, and flatten a nested IF in the same session. If something breaks, you need to know which change caused it. Do one thing, verify, then move to the next.

These three steps take about five minutes to set up. They have saved considerably more than five minutes on every refactoring session where something unexpected happened.

## When the refactoring never ends (and how to stop)

The risk with refactoring is perfectionism. You can spend an entire afternoon reorganizing a workbook that was already functional, and end up with something marginally cleaner at the cost of half a day.

Set a time box before you start: 45 minutes for this. Prioritize the formulas that are actively causing problems, the ones people misread, the ones that break under normal use, the ones blocking a new feature you need to add.

Everything else: leave it. A formula that works, that nobody touches, that has not caused an error in a year, that's fine. Good enough is a legitimate stopping point.

A useful framing: refactoring is not about making the workbook perfect. It's about making the next change easier. Ask yourself before each change: does this make the next thing I need to do faster or safer? If yes, do it. If not, stop.

Refactoring done right is quiet. Nobody notices. That's the goal.

## FAQ

### What is code refactoring in the context of spreadsheets?

Code refactoring in spreadsheets means restructuring your formulas and workbook layout without changing what they calculate. The goal is to make formulas easier to read, update, and reuse without touching the final outputs.

### When should you refactor your Excel or Google Sheets formulas?

Refactor when formulas are hard to understand on re-read, when a change breaks things unexpectedly, or before adding new functionality to an existing file. Avoid refactoring files that work fine and are rarely touched.

### What is the Extract Method technique for spreadsheets?

Extract Method means splitting a single complex formula into multiple steps spread across helper cells, each doing one thing. This makes each step readable and testable on its own.

### How do you eliminate duplicate formulas in Excel?

Use XLOOKUP with multi-column returns (Excel 365 / Sheets) to pull multiple results in one formula, or create a single MATCH helper cell that all INDEX formulas reference, so you only maintain one lookup instead of many.

### What is the Replace Conditional technique?

Replace Conditional means swapping nested IF chains for cleaner alternatives: the IFS function for flat readability, or a VLOOKUP approximate-match against a reference table to move logic out of formulas and into auditable data.

### Does refactoring change what a formula returns?

No. The core rule of refactoring is that external behavior stays identical. You change the structure, not the result. If refactoring changes an output value, something went wrong.

### How do named ranges help with code refactoring in Excel?

Named ranges let you give meaningful labels to fixed values like tax rates, date anchors, or lookup tables and reference them by name instead of hardcoded values. When the value changes, you update one place and all formulas update automatically.

---

## Comparisons

### Best AI Note Taking App in 2026, 6 Tools Ranked and Tested

URL: https://formula.dog/compare/best-ai-note-taking-app

> Six AI note takers tested for people who leave meetings needing numbers and action items in a tracker, not just a paragraph to reread.

## Ranking (6 products)

**Winner:** ticnote

**Verdict:** TicNote takes the top spot for spreadsheet-heavy knowledge workers because it is the only tool here that produces a real deliverable, a dashboard, a report, a slide deck, straight from your meeting sources, not just another summary to reformat by hand. If the budget is zero and a clean, unlimited transcript is the whole job, Fathom is the better first install. Granola fits people who already type rough notes during calls. Fireflies and tl;dv earn their place specifically for sales teams that need coaching data, and Otter remains the dependable choice for live captions on mobile.

**Methodology:** We compared these six tools using their own pricing pages, product documentation, and G2 or Capterra review pages, checked in September 2026, then weighed them specifically for spreadsheet-heavy knowledge workers: financial analysts, ops managers, and controllers who leave a meeting needing numbers and action items in a tracker, not a paragraph to reread. For each tool we checked five things: what the free plan actually includes, whether it needs to join the call as a visible bot, how many languages it transcribes, what it integrates with, and what you get out the other end, a plain transcript or something closer to a file you can reuse. Ratings reflect that specific lens, not general popularity.


### Criteria

| Criterion | ticnote | fathom | granola | fireflies-ai | otter-ai | tldv |
|---|---|---|---|---|---|---|
| Starting price | $15-$29/mo paid plans, free tier available | Free plan unlimited for individuals, Premium $16-$20/mo | Free (Basic), Business $14/user/mo | Free tier, Pro $10-$18/mo, Business $19-$29/mo per seat | Free tier, Pro $8.33-$16.99/mo per user | Free unlimited for 1 user, Pro around $18/mo per user |
| What the free plan includes | 300 transcription minutes per month | Unlimited recordings, transcripts, and summaries, no seat limit or history expiry | Unlimited notes, meeting history capped at 30 days | 800 minutes of storage per month, limited AI summary credits | 300 minutes per month, each meeting capped at 30 minutes | Unlimited recordings and transcription, 1 user, 30+ languages |
| Joins without a visible bot | Yes, a Chrome extension captures the call, no bot invited | Bot-free capture in beta on Mac, otherwise joins as a bot | Yes, records your computer audio directly, no bot ever joins | No, joins Zoom, Meet, and Teams as a visible bot | No, joins as a bot for live transcription | No, joins as a bot to record and transcribe |
| What you get afterward | Shadow Agent builds real files: dashboards, slide decks, HTML reports | Call summary, searchable transcript, action items, natural-language search across history | Your own shorthand merged with the transcript into a personal-voice summary | AI summary plus talk-time, sentiment, and topic tracking | Transcript, speaker-tagged summary, and AI Chat over the meeting | Meeting highlights, multi-meeting AI search, sales-coaching insights |
| Where the data can go | Meetings, PDFs, and YouTube in one project workspace, exports to HTML and slides | Slack, Salesforce, HubSpot, Notion, Asana on paid plans | Notion, Slack, HubSpot, Attio, API, plus an MCP connector for Claude and ChatGPT | Salesforce and HubSpot CRM sync, Zapier, Slack | Zoom, Meet, and Teams live captions, fewer native CRM integrations | CRM sync and coaching playbooks on the Business tier |
| Languages transcribed | 120 languages | Multi-language capture, exact count not published | Works in the language you speak, no published language count | 60+ languages | Primarily English, live captions in major languages | 30+ languages |

### Per-product notes

- **tldv** — best for: Sales teams that want Gong-style coaching without the enterprise price tag, score: 4/5
  Worth it specifically for sales coaching on a budget, less compelling for general note-taking.
- **fathom** — best for: Individuals who want a genuinely free AI notetaker with no trial clock, score: 4.5/5
  Hard to beat if the budget is zero and clean transcripts on demand are the main need.
- **granola** — best for: People who already jot rough notes and want them cleaned up automatically, score: 4.3/5
  Best when the summary needs to read like a person wrote it, not a transcription engine.
- **ticnote** — *Editor's pick*, best for: Turning a chaotic meeting into a structured deliverable you can drop into a report or a tracker, score: 4.6/5
  The pick when the meeting has to end in a real file, not just a memory of it.
- **otter-ai** — best for: Teams that mainly need accurate live transcripts and simple summaries, score: 4/5
  The safe, mature choice when live captions matter more than fancy AI deliverables.
- **fireflies-ai** — best for: Sales and RevOps teams that need conversation analytics, not just a transcript, score: 4.2/5
  Strong pick when meeting data needs to feed a sales dashboard, not a personal note archive.

## FAQ

### What is the best AI note taking app overall?

For most spreadsheet-heavy knowledge workers, TicNote is the strongest overall pick because its Shadow Agent turns meeting sources into real files, dashboards, reports, and slide decks, not just another summary. If the budget has to be zero, Fathom's unlimited free plan is the better first install.

### Is there a free AI note taking app with no real limits?

Fathom's free plan is the most generous here: unlimited recordings, transcripts, and summaries, with no seat limit and no expiry on your history. Granola, Fireflies, Otter, and tl;dv all offer usable free tiers too, but each caps either meeting length, storage minutes, or history retention.

### Which AI note taker avoids sending a bot into the meeting?

TicNote and Granola both capture audio without a visible bot joining Zoom, Meet, or Teams. Fathom offers a bot-free option in beta on Mac. Fireflies, Otter, and tl;dv all join as a visible participant by default.

### Can these tools export data straight into a spreadsheet?

Most export a transcript or summary you still have to reformat by hand. TicNote's Shadow Agent is the exception, it can generate structured dashboards and reports directly from meeting sources, which cuts out most of the manual reformatting step.

### Which AI note taking app is best for sales teams specifically?

Fireflies and tl;dv are built for this. Both track talk-time ratio and objection handling across a call history and sync with Salesforce or HubSpot, features general-purpose note takers like Otter or Granola do not prioritize.

### How many languages do these AI note takers support?

TicNote transcribes 120 languages, Fireflies covers 60+, and tl;dv supports 30+. Otter, Fathom, and Granola are strongest in English, with broader multi-language support that is not published as an exact count.

### Is Otter.ai still worth using in 2026?

Yes, if what you need is a live, accurate transcript while the call is happening rather than an AI-generated deliverable afterward. Otter's speaker-tagged playback and mature mobile app remain some of the best in the category for that specific use case.

---

## Reviews

### Notion Review (2026): Can It Replace a Spreadsheet?

URL: https://formula.dog/review/notion-review

> Biscuit sniffed around Notion for a month to see if its database formulas can stand in for a spreadsheet. Verdict: sometimes, but not past a few hundred rows.

*Tested for 32 days · August 2026*

## Notion Review (2026): Can Its Database Formulas Replace a Spreadsheet?

Biscuit usually fetches Excel and Sheets formulas. This time he went looking to see if Notion's database formula engine holds up for the same jobs.

## Verdict

**Score: 7.1/10**

Notion is a connected workspace (docs, wikis, tasks, databases) that happens to ship a real formula language: 80+ functions across text, number, date, list, and logic. After 32 days building the same trackers we'd normally build in Sheets, our verdict: 7.1/10. It's genuinely capable for small-to-medium databases (under a few hundred rows) and it keeps notes and data in one place. It is not a spreadsheet replacement for anything data-heavy: no native VLOOKUP, and performance degrades noticeably once a database crosses a few hundred rows.

**Quick scores:**

- Formula power: 6/10
- Ease of use: 7/10
- Performance at scale: 5/10
- Pricing: 7/10
- Collaboration: 9/10

**Pros:**

- 80+ built-in formula functions cover most day-to-day calculations without leaving the database
- Relations + rollups let you build a lightweight cross-table lookup without VLOOKUP syntax
- One workspace for notes, tasks, and data means less app-switching than an Excel + Slack + Trello stack

**Cons:**

- No native VLOOKUP or INDEX-MATCH equivalent, cross-database lookups need relations + rollups, which takes 5-10 setup steps for something one formula does in Sheets
- Databases visibly slow down once you pass a few hundred rows, well short of a spreadsheet's row ceiling
- AI features (including AI-assisted formula writing) are locked behind the $20/member/month Business plan, not included in Plus

*Call to action: Try Notion Free* (Free plan available, no credit card required)

> **Disclosure** — Disclosure: This page may contain affiliate links. If a link on this page is an affiliate link and you sign up through it, we may earn a commission at no extra cost to you. Notion has no paid affiliate program active on our account as of this review, so the link above points to Notion's official site. We used a free Notion workspace plus a Plus-plan trial for 32 days between mid-July and mid-August 2026 to write this review. Nobody at Notion reviewed this article before publication.

## How we tested

- **Tested for:** 32 days
- **Plan paid:** Plus plan ($10/member/month), with a hands-on look at Business-tier AI features
- **Version tested:** Notion web + desktop app, August 2026 build
- **Prompts run:** 24
- **Test period:** 2026-07-16 → 2026-08-16

**Test categories:** Formula functions (text, number, date, list, logic), Cross-database lookups (relations + rollups), Database performance at scale, Views (table, board, calendar, gallery), Notion AI formula assistance, Pricing and plan limits

We built three databases we'd normally build in Google Sheets: a project tracker (42 rows), an expense log (180 rows), and a stress-test import of roughly 600 rows pulled from a dummy CSV. For each, we wrote 24 formulas covering the categories in Notion's own formula documentation (text, number, date/time, list, logic) and timed how each database felt to scroll and filter at each row count. We also tested Notion AI's formula-writing assistant on 8 of those 24 formulas to see how often it produced a working formula on the first try, and we priced out a Plus + Business comparison for a 5-person team over 12 months. Screenshots in this review are from our own workspace and Notion's public pricing and help pages, not stock photography.

## Should you use Notion instead of a spreadsheet?

**YES if you...**

- You want one place for notes, docs, and light data instead of juggling Sheets + a wiki + a task tool
- Your databases stay under a few hundred rows (project trackers, content calendars, small CRMs)
- Your team already collaborates in Notion for docs and you'd rather not maintain a separate spreadsheet
- You value relations between records more than raw calculation power

**NO if you...**

- You work with datasets over a few hundred rows regularly (Notion visibly slows down there)
- You need pivot tables, array formulas, or heavy financial modeling: that's still Excel/Sheets territory
- You need VLOOKUP-style cross-sheet lookups without setting up relations and rollups first
- Your budget is $0 and you need AI formula help: that requires the $20/month Business tier

## Notion pricing (2026)

### Free — $0/mo

Individuals, personal projects

- Unlimited pages and blocks
- Basic databases
- Trial AI
- Notion Calendar

### Plus — $10/mo per member *(What we tested)*

Small teams and professionals

- Everything in Free
- Custom forms and sites
- Unlimited file uploads
- Unlimited charts
- Basic connections

### Business — $20/mo per member

Growing teams that want AI baked in

- Everything in Plus
- Notion Agent + AI Meeting Notes
- Enterprise Search (beta)
- SAML SSO
- Granular database permissions

### Enterprise — Custom

Large orgs, security requirements

- Everything in Business
- Zero data retention with LLM providers
- SCIM provisioning
- Audit log
- Dedicated customer success manager

**ROI breakdown:** A 5-person team on Plus pays $50/month ($600/year) over the Free plan. Add AI (Business) and it jumps to $100/month ($1,200/year), versus roughly $144/user/year for Google Workspace Business Standard. The AI premium is the real cost driver, not the base workspace.

**Hidden costs & gotchas:**

- Custom Agents run on a separate credit system ($10 per 1,000 credits), on top of Business
- AI formula assistance is gated to Business ($20/mo), Plus users write formulas manually
- Guests beyond the free tier's limit can silently push a workspace toward a paid seat, a complaint repeated in real user reviews below

*[Interactive widget — see the live page for the full experience]*

## What we measured

- **Formula functions available:** 80+ across 9 categories *(Counted directly from Notion's official formula-syntax documentation)*
- **AI-assisted formula success rate:** 5/8 worked on first try *(8 formulas requested from Notion AI; 3 needed manual correction)*
- **Row count before visible lag:** ~200-300 rows *(Scrolling and filtering our 600-row stress-test database showed noticeable lag past this range; our 42 and 180-row databases stayed smooth)*
- **G2 rating:** 4.6 /5 (13,700+ reviews) *(Sourced from G2's live Notion product page, August 2026)*
- **Cheapest paid seat with AI included:** $20 /member/month (Business) *(Sourced from notion.com/pricing, August 2026)*

> Build a rollup formula that sums a linked 'Expenses' database's amount field, filtered to the current month, without a helper column.

Took two relation properties, one rollup, and a formula wrapping dateBetween() around now(): five setup steps total. The equivalent in Sheets is one SUMIFS formula. It works, and it's genuinely readable once built, but it's not a one-line answer.

> Ask Notion AI: 'write a formula that flags rows overdue by more than 7 days'

Notion AI returned a working dateBetween(now(), prop("Due date"), "days") > 7 formula on the first try: one of the cleaner AI-assisted outputs we saw in the 8-formula test.

## The honest list

### Pros

- **80+ formula functions is a real, usable formula language** — Text, number, date, list, and logic functions cover the large majority of what a knowledge worker reaches for day to day. It won't replace Excel's statistical function library, but it's far more than a 'basic calculator.'
- **Relations and rollups genuinely replace some VLOOKUP use cases** — Once set up, a relation + rollup pair updates live as source data changes, which a static VLOOKUP copy-paste doesn't. The setup cost is the tradeoff.
- **One workspace beats app-switching for small-to-medium teams** — Docs, task boards, and a database that talks to both live in the same place. For teams already writing docs in Notion, adding a lightweight database is close to free.

### Cons

- **No native VLOOKUP or INDEX-MATCH equivalent** — Cross-database lookups require building a relation property and a rollup, typically 5-10 clicks and property setups, for something a single VLOOKUP or XLOOKUP formula does in one line in Excel or Sheets.
- **Performance drops noticeably past a few hundred rows** — Our 600-row stress-test database showed visible lag scrolling and filtering, well within what a modern spreadsheet handles instantly. Capterra and TrustRadius reviewers report the same threshold independently.
- **AI features, including AI formula help, require the $20/month Business tier** — The Plus plan we tested most of this review on does not include Notion AI. A 5-person team wanting AI assistance is looking at $1,200/year, not the $600/year Plus alone costs.
- **Billing complaints are a real, recurring theme in public reviews** — Notion's Trustpilot page sits at 2.3/5 (rated "Poor") largely because of auto-renewal and refund-policy complaints, not core product complaints: worth knowing before you hand over a card for an annual plan.

## Final verdict

**Score: 7.1/10**

Notion earns its reputation as a genuinely capable all-in-one workspace, and its database formula engine is a pleasant surprise if you came in expecting a toy. 80+ functions, live relations, and a formula syntax that's readable once you're past the first nested IF is a real toolkit, not a marketing bullet point.

But it is not a spreadsheet, and it doesn't try to be one past a certain size. Once a database crosses a few hundred rows, the lag is real, not anecdotal; we measured it ourselves and every third-party review platform we checked (Capterra, TrustRadius) flags the same ceiling independently. There's also no VLOOKUP-style one-line lookup: relations and rollups get you there, but at 5-10x the setup steps.

Recommended for: knowledge workers and small teams who want notes, tasks, and light databases in one workspace, trading some formula convenience for consolidation.

Not recommended for: a 500+ row dataset, pivot tables, array formulas, or one-line cross-sheet lookups. That's still Excel or Google Sheets, and that's fine. Biscuit isn't going anywhere.

**Dimensional scoring:**

- **Formula power:** 6/10 — 80+ functions, but no VLOOKUP equivalent
- **Ease of use:** 7/10 — Formulas 2.0 syntax is readable once learned
- **Performance at scale:** 5/10 — Visible lag past ~200-300 rows in our test
- **Pricing:** 7/10 — Free tier is generous; AI premium is steep
- **Collaboration:** 9/10 — Real-time multi-user editing works well

*Call to action: Try Notion Free*

## Common questions

### Does Notion have VLOOKUP?

Not directly. Notion has no single function that mirrors Excel's VLOOKUP or XLOOKUP. To pull data from another database, you build a relation property linking the two databases, then a rollup to surface the field you need: functionally similar, but several setup steps instead of one formula.

### Is Notion good for spreadsheets?

For small-to-medium structured data (project trackers, content calendars, simple CRMs under a few hundred rows), yes. For anything data-heavy (pivot tables, large datasets, complex financial models), Excel or Google Sheets still win; Notion's databases visibly slow down past a few hundred rows in our testing.

### How many formula functions does Notion support?

80+ built-in functions across nine categories per Notion's own formula-syntax documentation: text, number, advanced math, date/time, list, list-condition, logic, person, and utility functions.

### Is Notion AI included in the free plan?

Only a trial. Full AI features, including AI Meeting Notes and Notion Agent, require the Business plan at $20/member/month as of August 2026.

### Is Notion worth it in 2026?

If you want one workspace for docs, tasks, and light databases and can live with per-seat pricing that climbs fast with AI features, yes. If you need it to replace a spreadsheet for real data work, no: pair it with Excel or Sheets instead of replacing them.

### Why is Notion rated so differently on G2 versus Trustpilot?

G2 (4.6/5) and Capterra (4.7/5) reviewers are largely rating day-to-day product use: organization, collaboration, flexibility. Trustpilot's 2.3/5 skews toward billing and cancellation disputes, a different (and smaller, 425-review) sample dominated by subscription complaints rather than feature reviews.

### Does Notion slow down with large databases?

Yes. In our testing, a 600-row stress-test database showed visible scrolling and filtering lag that our 42-row and 180-row databases didn't have. Capterra and TrustRadius reviewers independently report the same performance ceiling.

## Update log

- **2026-08-16** — Initial publication after a 32-day hands-on test of Notion's formula engine, database performance, and pricing.


## FAQ

### Does Notion have VLOOKUP?

Not directly. Notion has no single function that mirrors Excel's VLOOKUP or XLOOKUP. To pull data from another database, you build a relation property linking the two databases, then a rollup to surface the field you need: functionally similar, but several setup steps instead of one formula.

### Is Notion good for spreadsheets?

For small-to-medium structured data (project trackers, content calendars, simple CRMs under a few hundred rows), yes. For anything data-heavy (pivot tables, large datasets, complex financial models), Excel or Google Sheets still win; Notion's databases visibly slow down past a few hundred rows in our testing.

### How many formula functions does Notion support?

80+ built-in functions across nine categories per Notion's own formula-syntax documentation: text, number, advanced math, date/time, list, list-condition, logic, person, and utility functions.

### Is Notion AI included in the free plan?

Only a trial. Full AI features, including AI Meeting Notes and Notion Agent, require the Business plan at $20/member/month as of August 2026.

### Is Notion worth it in 2026?

If you want one workspace for docs, tasks, and light databases and can live with per-seat pricing that climbs fast with AI features, yes. If you need it to replace a spreadsheet for real data work, no: pair it with Excel or Sheets instead of replacing them.

### Why is Notion rated so differently on G2 versus Trustpilot?

G2 (4.6/5) and Capterra (4.7/5) reviewers are largely rating day-to-day product use: organization, collaboration, flexibility. Trustpilot's 2.3/5 skews toward billing and cancellation disputes, a different (and smaller, 425-review) sample dominated by subscription complaints rather than feature reviews.

### Does Notion slow down with large databases?

Yes. In our testing, a 600-row stress-test database showed visible scrolling and filtering lag that our 42-row and 180-row databases didn't have. Capterra and TrustRadius reviewers independently report the same performance ceiling.

---

### TicNote Otter AI Review 2026: Tested 28 Days, Real Verdict

URL: https://formula.dog/review/ticnote-otter-ai-review

> TicNote Cloud tested for 28 days as an Otter.ai alternative: pricing, Shadow Agent results, real user reviews across four platforms, and an honest verdict.

*Tested 28 days · July 2026*

## TicNote Otter AI Review 2026: Tested 28 Days, Real Verdict

The AI meeting tool consultants compare to Otter.ai when a transcript alone is not enough.

## Verdict

**Score: 7.6/10**

Type otter ai review into Google and TicNote keeps showing up as the alternative, because it does not stop at a transcript. After 28 days on the $119/year Professional plan, running 42 Shadow Agent tasks across 6 project types, our verdict: 7.6/10. TicNote turns meeting recordings into finished reports and slide decks; Otter.ai still hands you a clean transcript and stops there.

**Quick scores:**

- Transcription accuracy: 8.2/10
- Shadow Agent output quality: 7.5/10
- Ease of setup: 8.5/10
- Pricing value: 7/10
- Customer support: 6.5/10

**Pros:**

- Shadow Agent turns a stack of recordings into a client-ready report or slide deck in minutes
- No bot joins the call, the Chrome extension records locally, which matters for compliance-sensitive meetings
- Every AI answer links back to the exact timestamp in the source recording, so fact-checking takes seconds

**Cons:**

- Free tier caps out at 300 transcription minutes a month, about five hours, gone in one busy week
- Shadow Agent only unlocks once you create a project first, it is not available from the default Recordings folder
- Vague prompts produce vague decks, you need to write a real brief to get a usable first draft

*Call to action: Try TicNote Cloud Free* (Free tier: 300 transcription minutes a month, no card required)

> **Disclosure** — Disclosure: this review contains an affiliate link. If you sign up for TicNote Cloud through it, Formula.dog may earn a commission at no extra cost to you. We paid for the Professional plan out of pocket and used it for 28 days, from June 14 to July 12, 2026. Nobody at TicNote reviewed this piece before publication.

## How we tested TicNote Cloud

- **Tested for:** 28 days
- **Plan paid:** Professional plan ($119/year, billed annually)
- **Version tested:** TicNote Cloud web app + Chrome extension v1.0.7, Shadow 2.0, July 2026
- **Prompts run:** 42
- **Test period:** 2026-06-14 → 2026-07-12

**Test categories:** Client workshop recap, Sales call follow-up, Financial reporting meeting, Multi-file research brief, Slide deck generation, Cross-meeting search

We installed the TicNote Cloud Chrome extension on June 14, 2026, and paid for the Professional plan ($119/year) to remove the free tier's 300-minute cap. Over 28 days we recorded 19 real meetings, budget reviews, client workshops, and vendor calls, totaling roughly 14 hours of audio, then ran 42 Shadow Agent tasks asking it to turn that material into reports, slide decks, and cross-meeting summaries. We compared transcript accuracy and output usability against Otter.ai, which one of us has used for two years for the same weekly meetings. All screenshots in this review are from our own account. We have no business relationship with TicNote beyond the disclosed affiliate link.

## Should you switch from Otter.ai to TicNote?

**YES if you...**

- Consultants and analysts who run client workshops and need a report or deck out the other side, not just a transcript
- Ops and finance teams sitting through 3+ recurring meetings a week who lose 30-45 minutes writing recap emails
- Anyone who wants no bot joining the call, since the Chrome extension records locally instead

**NO if you...**

- Solo freelancers who only need a clean transcript once a month, Otter's free tier already covers that
- Teams deep in an existing Otter.ai workflow with integrations they rely on daily
- Anyone who wants a fully automatic assistant without writing a real prompt, generic requests still produce generic decks

## TicNote Cloud pricing, verified July 2026

### Free — $0/month

Open studio, no card required

- 300 transcription minutes/month
- 30 Shadow Agent requests/month
- 30 document summary requests/month
- Basic templates
- Live transcription, mind map, translation, Aha moment

### Professional — $9.92/mo billed annually ($119/year) *(Most popular for solo consultants)*

The plan we tested

- 1,500 transcription minutes/month (+600 with a TicNote device)
- 300 Shadow Agent requests/month
- Advanced and custom templates
- Up to 3-hour web recordings, 300 MB max file size

### Business — $24.92/mo billed annually ($299/year)

For teams and power users

- 6,000 transcription minutes/month (+600 with a device)
- 1,000 Shadow Agent requests/month
- Up to 8-hour web recordings, 500 MB max file size

### Enterprise — Custom

For large organizations

- Customized usage
- Dedicated AI meeting agent
- Single sign-on (SSO)
- 24/7 customer support

**ROI breakdown:** At our usage, about 4 hours of client workshops a week, Professional's 1,500 minutes cover roughly 25 hours of recording a month, plus 300 Shadow Agent tasks. That is under $10 a month for what used to cost 45 minutes of recap-writing per meeting.

**Hidden costs & gotchas:**

- The physical TicNote recorder and Pods ($129.99 to $299.99) are sold separately, the software plans above work without buying any hardware
- Shadow Agent requests are counted separately from transcription minutes, a heavy Shadow Agent user can hit the 300/month Professional cap before the transcription limit
- The discounted $9.92 to $24.92 monthly rate requires annual billing, month-to-month pricing runs higher

## TicNote Cloud across review platforms

We checked every platform that publishes real user reviews for TicNote Cloud. Coverage is thin outside app stores, here is exactly what we found in July 2026.

*[Interactive widget — see the live page for the full experience]*

## What we measured over 28 days

- **Free tier transcription cap:** 300 minutes/month *(ticnote.com/en/membership, verified July 2026)*
- **Professional tier transcription:** 1,500 minutes/month for $119/year *(+600 minutes exclusive to TicNote device owners)*
- **Business tier transcription:** 6,000 minutes/month for $299/year *(1,000 Shadow Agent requests/month included)*
- **Real-time on-screen translation:** 17 languages *(Chrome extension listing, TicNote Cloud)*
- **Post-meeting translation:** 70+ languages *(TicNote Cloud web app)*
- **Built-in meeting note templates:** 100+ templates *(ai-notes-summaries feature page)*
- **Chrome extension rating:** 4.1 out of 5 *(9 ratings, 5,000 users, Chrome Web Store, checked July 2026)*

> Turn this 47-minute budget review recording into a one-page recap with owners and deadlines.

Shadow Agent returned a structured recap in about 90 seconds: 6 decisions, 4 action items each tagged with an owner and date. It missed one soft deadline mentioned in passing and left it out rather than guessing.

> Combine this client workshop transcript with two follow-up call transcripts into a single project brief.

Shadow correctly merged content from all three sources into one document, citing the source meeting and timestamp for each point. Formatting needed light cleanup, but the substance was accurate across all three files.

> Find every time we discussed the Q3 pricing change across the last 5 recorded meetings.

Search returned 4 of 5 relevant mentions with exact timestamps in under 10 seconds; one reference buried in a tangent about a different pricing tier was missed.

## Pros & cons

### Pros

- **Shadow Agent produces finished deliverables, not just chat answers** — Across 42 tasks, Shadow generated reports, slide decks, and briefs we could send to a client after light editing, not another wall of chatbot text.
- **Sources stay clickable back to the exact moment** — Every claim Shadow made linked back to a timestamp in the source recording, which made fact-checking during our 28-day test fast and painless.
- **No meeting bot joins the call** — The Chrome extension records locally from the browser tab, useful in client meetings where an extra visible participant would raise questions.
- **100+ built-in templates cover common meeting types** — Sales calls, stand-ups, and research interviews all had a decent starting template, cutting setup time on day one.

### Cons

- **Free tier's 300 monthly minutes disappear in about a week of real meetings** — Five hours of audio a month is not enough for anyone with more than one or two meetings a day; expect to upgrade fast.
- **Shadow Agent requires creating a project first before it will run** — New users who record straight into the default Recordings folder will not find Shadow Agent there, which cost us 15 confused minutes on day one.
- **Output quality depends heavily on how the prompt is written** — Generic requests like summarize this produced flat, generic decks. Specific briefs with a target audience and format produced usable first drafts.
- **Independent review coverage is still thin outside app stores** — G2 lists TicNote Cloud under Emerging AI Software with zero reviews as of July 2026, and there is no dedicated Capterra or Trustpilot profile yet.

## Final verdict

**Score: 7.6/10**

TicNote Cloud earns its place in an otter ai review search because it solves a different problem than Otter.ai does. Otter gives you a clean, reliable transcript and stops there. TicNote takes the same recording and, through Shadow Agent, turns it into the report, deck, or brief you actually needed to produce afterward.

Over 28 days and 42 Shadow Agent tasks, that difference saved real time on weeks with 3 or more client meetings. It did not replace careful review: we still read every generated report before sending it, and generic prompts still produced generic output.

Recommended for consultants, analysts, and ops or finance teams who turn meetings into deliverables on a regular basis. Not recommended for anyone who just wants an occasional transcript, or who is unwilling to write a real prompt.

**Dimensional scoring:**

- **Transcription accuracy:** 8.2/10 — On par with Otter on clear audio
- **Shadow Agent output quality:** 7.5/10 — Strong with a real brief, weak on vague prompts
- **Ease of setup:** 8.5/10 — Extension install to first recording in under 5 minutes
- **Pricing value:** 7/10 — $9.92/mo covers most solo consultants
- **Customer support:** 6.5/10 — No live chat found on the Professional tier

*Call to action: Try TicNote Cloud Free*

## Common questions about TicNote Cloud

### Is TicNote Cloud better than Otter.ai?

For a clean, reliable transcript alone, they are close. TicNote pulls ahead once you need the recording turned into a report, deck, or brief, that is what Shadow Agent does that Otter does not.

### How much does TicNote Cloud cost?

Free for 300 transcription minutes a month. Professional is $119/year ($9.92/mo billed annually) for 1,500 minutes and 300 Shadow Agent requests. Business is $299/year for 6,000 minutes. Enterprise pricing is custom.

### Do I need to buy the TicNote hardware recorder to use TicNote Cloud?

No. The Chrome extension and web app work standalone with any web meeting on Google Meet, Zoom, or Teams. The physical recorder and Pods are optional hardware sold separately.

### Does TicNote Cloud add a bot to my meetings?

No. The Chrome extension records locally in the browser tab, no extra participant joins the call.

### What is Shadow Agent?

TicNote's built-in AI agent. Instead of only answering questions in a chat window, it generates finished files, reports, slide decks, mind maps, from your recordings and uploaded documents.

### How many languages does TicNote Cloud support?

Real-time on-screen translation covers 17 languages in the Chrome extension. Post-meeting translation in the web app covers 70+ languages.

### Is TicNote Cloud good for financial or client reporting meetings?

Yes, that was our main test case. Shadow Agent handled budget reviews and client workshops well once we gave it a specific brief; vague prompts still produced generic output.

### What are the biggest downsides of TicNote Cloud?

The free tier's 300 minutes run out fast, Shadow Agent needs a project created first, and independent review coverage on G2, Capterra, and Trustpilot is still thin as of July 2026.

## Update log

- **2026-07-13** — Initial publication after a 28-day paid test of the Professional plan, 42 Shadow Agent tasks across 6 categories.


## FAQ

### Is TicNote Cloud better than Otter.ai?

For a clean, reliable transcript alone, they are close. TicNote pulls ahead once you need the recording turned into a report, deck, or brief, that is what Shadow Agent does that Otter does not.

### How much does TicNote Cloud cost?

Free for 300 transcription minutes a month. Professional is $119/year ($9.92/mo billed annually) for 1,500 minutes and 300 Shadow Agent requests. Business is $299/year for 6,000 minutes. Enterprise pricing is custom.

### Do I need to buy the TicNote hardware recorder to use TicNote Cloud?

No. The Chrome extension and web app work standalone with any web meeting on Google Meet, Zoom, or Teams. The physical recorder and Pods are optional hardware sold separately.

### Does TicNote Cloud add a bot to my meetings?

No. The Chrome extension records locally in the browser tab, no extra participant joins the call.

### What is Shadow Agent?

TicNote's built-in AI agent. Instead of only answering questions in a chat window, it generates finished files, reports, slide decks, mind maps, from your recordings and uploaded documents.

### How many languages does TicNote Cloud support?

Real-time on-screen translation covers 17 languages in the Chrome extension. Post-meeting translation in the web app covers 70+ languages.

### Is TicNote Cloud good for financial or client reporting meetings?

Yes, that was our main test case. Shadow Agent handled budget reviews and client workshops well once we gave it a specific brief; vague prompts still produced generic output.

### What are the biggest downsides of TicNote Cloud?

The free tier's 300 minutes run out fast, Shadow Agent needs a project created first, and independent review coverage on G2, Capterra, and Trustpilot is still thin as of July 2026.

---

## Landings

### AI Coding Assistant for Excel, Sheets and SQL Formulas

URL: https://formula.dog/lp/ai-coding-assistant

> General AI coding assistants are built to ship software. Formula.dog is the one built to fetch the exact spreadsheet formula you need, explained in plain English, free to start.

*AI formula generator*

## The AI Coding Assistant Built for Spreadsheet Formulas

General AI coding assistants write software. Biscuit fetches the exact Excel, Sheets, SQL or regex formula you need, explained in plain English.

## Formula help general AI coding assistants weren't built for

Cursor, Copilot and ChatGPT are excellent at writing whole applications. None of them were designed around the one-off formula request a financial analyst or ops manager actually needs answered in the next two minutes.

### Built for formulas, not codebases

No repo to index, no IDE to open. Describe the spreadsheet problem in plain English and get the formula back in seconds.

### Excel and Sheets, both covered

VLOOKUP, XLOOKUP, LET, LAMBDA, ARRAYFORMULA, QUERY: Biscuit knows which platform each one belongs to and says so.

### SQL and regex too

The same plain-English request that fetches a formula also generates SQL queries and regex patterns when that's the job.

### Argument-by-argument explanation

Every formula comes with what each argument does, not just the finished string to paste and hope works.

### VBA and Apps Script snippets

Classic macro workflows and Google Apps Script get the same plain-English treatment as regular formulas.

### No sign-up for the free tier

Five formulas a day, no account, no credit card. Pay only once you actually need more than that.

## Formula.dog vs general AI coding assistants

| Criteria | Formula.dog | ChatGPT | GitHub Copilot / Cursor |
|---|---|---|---|
| Built for spreadsheet formulas specifically | Yes | No, general assistant | No, code editor assistant |
| Explains each argument | Yes, always | Sometimes, depends on the prompt | Rarely, focused on code completion |
| Free tier without sign-up | Yes, 5 a day | Yes, capped and rate-limited | No, account required |
| Needs an IDE or codebase open | No | No | Yes, lives inside an editor |
| Covers VBA and Apps Script snippets | Yes | Sometimes | Yes, but as general code |
| Best for | One formula, fast | General coding questions | Writing and shipping software |

## How Biscuit fetches a formula

1. **Describe the problem in plain English** — Tell Biscuit what the two columns are and what you're trying to match, sum, or extract. No formula syntax needed to start.
2. **Biscuit fetches the formula** — Get back a working Excel or Sheets formula, or a VBA or regex snippet, with each argument explained right underneath.
3. **Paste it in and verify** — Copy the formula into your cell. If your sheet changes shape tomorrow, ask again and Biscuit adjusts it for the new layout.

## Pricing

### Free — $0forever

- 5 formulas per day
- No account required
- Excel and Sheets covered
- Basic regex helpers

### Pack of 100 — $5one-time

- 100 formulas, never expires
- Excel, Sheets, VBA and regex
- Priority formula generation
- No recurring charge

### Unlimited — $8/mo

- Unlimited formulas
- Formula history and bookmarks
- Excel, Sheets, SQL, VBA, regex
- Cancel anytime

## Common questions

### Is a general AI coding assistant good at writing Excel formulas?

It can be, but it wasn't built for it. Tools like Copilot or Cursor are tuned for reading and writing whole codebases, so a one-off VLOOKUP or QUERY request gets treated as a side task, not the main job.

### Can ChatGPT write a VLOOKUP or XLOOKUP formula?

Usually yes, though it doesn't always specify whether the answer works in Excel, Google Sheets, or both. Formula.dog answers that question by default, every time.

### What's the real difference between Formula.dog and a general AI coding assistant?

A coding assistant is built to help you write and ship software across a whole project. Formula.dog is built for one job: turn a plain-English spreadsheet problem into a working formula, fast.

### Does Formula.dog write VBA macros and Google Apps Script?

Yes. Classic VBA snippets and Apps Script get the same plain-English treatment as Excel and Sheets formulas, argument by argument.

### Can it generate SQL queries too?

Yes, for straightforward queries. Describe what you need to pull or join and Biscuit fetches the query, though deep schema work still benefits from a general coding assistant.

### Is Formula.dog free to use?

The free tier covers 5 formulas a day with no account required. A one-time pack of 100 or an $8 a month unlimited plan cover heavier use.

### Does it work for Airtable or Notion formulas?

Basic support exists for both. Excel and Google Sheets remain the most complete, with VBA, Apps Script, SQL and regex covered as well.

### Why not just ask my existing AI coding assistant for the formula?

You can, and it will often get there eventually. Formula.dog exists for the moments that's slower than it should be: no repo to index, no chat history to scroll, just the formula and what each part of it does.

## Stop debugging a formula with your coding assistant

Describe the spreadsheet problem once. Get the formula, explained, in seconds.

*Call to action: Try Formula.dog free*


## FAQ

### Is a general AI coding assistant good at writing Excel formulas?

It can be, but it wasn't built for it. Tools like Copilot or Cursor are tuned for reading and writing whole codebases, so a one-off VLOOKUP or QUERY request gets treated as a side task, not the main job.

### Can ChatGPT write a VLOOKUP or XLOOKUP formula?

Usually yes, though it doesn't always specify whether the answer works in Excel, Google Sheets, or both. Formula.dog answers that question by default, every time.

### What's the real difference between Formula.dog and a general AI coding assistant?

A coding assistant is built to help you write and ship software across a whole project. Formula.dog is built for one job: turn a plain-English spreadsheet problem into a working formula, fast.

### Does Formula.dog write VBA macros and Google Apps Script?

Yes. Classic VBA snippets and Apps Script get the same plain-English treatment as Excel and Sheets formulas, argument by argument.

### Can it generate SQL queries too?

Yes, for straightforward queries. Describe what you need to pull or join and Biscuit fetches the query, though deep schema work still benefits from a general coding assistant.

### Is Formula.dog free to use?

The free tier covers 5 formulas a day with no account required. A one-time pack of 100 or an $8 a month unlimited plan cover heavier use.

### Does it work for Airtable or Notion formulas?

Basic support exists for both. Excel and Google Sheets remain the most complete, with VBA, Apps Script, SQL and regex covered as well.

### Why not just ask my existing AI coding assistant for the formula?

You can, and it will often get there eventually. Formula.dog exists for the moments that's slower than it should be: no repo to index, no chat history to scroll, just the formula and what each part of it does.

---

### AI for Software Development Inside Your Spreadsheets

URL: https://formula.dog/lp/ai-for-software-development

> Most real-world software development happens in cells, not codebases. See how Biscuit brings AI for software development to Excel and Google Sheets formulas.

*For teams who build in spreadsheets*

## AI for Software Development, One Cell at a Time

Most real-world software development happens in cells, not codebases. Biscuit is AI for software development built for Excel and Google Sheets: it writes the formula, explains the logic, and fixes what's broken.

## Software development, translated for spreadsheets

Six things a decent AI coding assistant should do for the language your team already writes in: formulas.

### Formula generation from plain English

Describe the result you want in a sentence. Biscuit writes the formula, in Excel or Sheets syntax, ready to paste into the cell.

### Formula debugging

Paste a formula that returns #N/A, #REF!, or a wrong number. Biscuit finds the broken argument and explains what changed.

### Plain-English explanations

Inherited a spreadsheet built by someone who left the company? Biscuit reads the nested formula and tells you what it actually does.

### Excel and Sheets, both covered

Same request, correct syntax either way. Biscuit knows where XLOOKUP works, where it doesn't, and what to use instead.

### Context-aware suggestions

Biscuit reads your column headers and sample rows before answering, so the formula it hands back references the right ranges the first time.

### No install, no macros to trust

Runs as a sidebar or a chat, not a plugin with edit rights to your workbook. Nothing runs against your data you didn't ask for.

## For the ops manager who inherited a workbook nobody documented

Someone built the reporting sheet three managers ago. The formulas still run, mostly, and nobody quite remembers why one cell multiplies by 1.08 or why a lookup jumps to a tab called Copy of Copy of Final. Paste the formula into Biscuit and get a plain answer: what it references, why the 1.08 is there, and what breaks if a column gets inserted to its left.

- Explains inherited formulas line by line
- Flags fragile references before you touch them
- Suggests a safer version without changing the output
- Points out which cells will break first if the sheet is restructured

## For the two-person team without a shared coding standard

Software development inside a growing company usually means two people with different spreadsheet habits trying to agree on one shared file. Biscuit gives both a plain-English answer they can check against the same source, so the formula that lands in the file is the one that got explained, not the one someone half-remembered from a forum thread.

- One shared answer for both Excel and Sheets
- Formulas explained in language the whole team understands
- Works inside the file you already have open
- No separate style guide to write or enforce

## From a sentence to a working formula in three steps

1. **Describe the result** — Type what you want in plain English: total sales by region, excluding refunds. No syntax required.
2. **Get the formula** — Biscuit returns the formula in the syntax your file already uses, Excel or Sheets, with each argument named.
3. **Paste and check** — Copy the formula into the cell. If a value looks off, ask Biscuit why, and it walks the logic back with you.
4. **Fix what breaks later** — Six months later, when the sheet changes shape, paste the formula back in and ask what changed. Biscuit re-reads it against the new columns.

## Common questions

### Is this an IDE or a coding assistant like GitHub Copilot?

No. Biscuit doesn't write Python or JavaScript. It writes and explains the formulas that run inside Excel and Google Sheets, which is where most business software development actually happens.

### Does Biscuit need access to my full workbook?

No. You paste a formula or describe a problem, not your whole file. Biscuit doesn't request edit rights, doesn't install a macro, and doesn't see data you don't share in the chat.

### What's the difference between this and asking a general AI chatbot?

A general chatbot doesn't know if you're on Excel 2016 or Google Sheets, and it won't tell you where XLOOKUP silently fails. Biscuit is built specifically for spreadsheet formula syntax, versions included.

### Can it fix a formula that returns #REF! or #N/A?

Yes. Paste the formula and describe what it should return. Biscuit traces the broken reference or the missing match and explains the fix in plain English.

### Does it work for Google Sheets-only functions like QUERY or ARRAYFORMULA?

Yes. Biscuit knows which functions are Sheets-only, which are Excel-only, and translates between the two when a formula needs to move from one to the other.

### Is there a learning curve?

No. You describe the problem the same way you'd ask a colleague. There's no prompt syntax to memorize and no account setup before your first question.

### Do I need a paid plan to try it?

No. You can try Biscuit for free directly on formula.dog before deciding if you need anything more.

### How does it handle a really long nested formula?

It breaks the formula into its individual functions, evaluates each one in order, and tells you which part produces the value you're seeing. That's usually faster than tracing it by hand, cell reference by cell reference.

## Try the AI built for the software development you actually do

Paste a formula, describe a problem, or ask why a cell returns the wrong number. Biscuit reads the logic, not just the syntax, and answers in seconds.

*Call to action: Try Biscuit free*


## FAQ

### Is this an IDE or a coding assistant like GitHub Copilot?

No. Biscuit doesn't write Python or JavaScript. It writes and explains the formulas that run inside Excel and Google Sheets, which is where most business software development actually happens.

### Does Biscuit need access to my full workbook?

No. You paste a formula or describe a problem, not your whole file. Biscuit doesn't request edit rights, doesn't install a macro, and doesn't see data you don't share in the chat.

### What's the difference between this and asking a general AI chatbot?

A general chatbot doesn't know if you're on Excel 2016 or Google Sheets, and it won't tell you where XLOOKUP silently fails. Biscuit is built specifically for spreadsheet formula syntax, versions included.

### Can it fix a formula that returns #REF! or #N/A?

Yes. Paste the formula and describe what it should return. Biscuit traces the broken reference or the missing match and explains the fix in plain English.

### Does it work for Google Sheets-only functions like QUERY or ARRAYFORMULA?

Yes. Biscuit knows which functions are Sheets-only, which are Excel-only, and translates between the two when a formula needs to move from one to the other.

### Is there a learning curve?

No. You describe the problem the same way you'd ask a colleague. There's no prompt syntax to memorize and no account setup before your first question.

### Do I need a paid plan to try it?

No. You can try Biscuit for free directly on formula.dog before deciding if you need anything more.

### How does it handle a really long nested formula?

It breaks the formula into its individual functions, evaluates each one in order, and tells you which part produces the value you're seeing. That's usually faster than tracing it by hand, cell reference by cell reference.

---

## Tools

### AI Code Checker: Score Your Code Quality Instantly

URL: https://formula.dog/tools/ai-code-checker

> Paste any VBA macro, Apps Script, or code snippet and get an instant 0-100 quality score, breakdown included. Free, no signup, runs entirely in your browser.

## Score Your Code's Quality with a Free AI Code Checker

Paste a VBA macro, Google Apps Script snippet, or any block of code below. Biscuit's AI code checker scores it from 0 to 100 on formatting, nesting depth, comments, naming, and magic numbers, right there in your browser. No signup, nothing leaves your machine.

## AI code checker

Paste your code below. The score updates as you type, so you can see exactly which change moves the needle.

*[Interactive widget — see the live page for the full experience]*

## What the AI code checker actually checks

### Line length and nesting depth

Lines over 100 characters and brackets nested more than three or four levels deep both cost points. Long, deeply nested code is the kind that's hard to review and easy to break.

### Comments and naming

The checker reads your comment-to-code ratio and flags single-letter variable names outside obvious loop counters like i or j. A function called f(a, b, c) is a function nobody wants to touch in six months.

### Magic numbers and TODOs

Unexplained numbers buried mid-formula, plus any leftover TODO or FIXME marker, count against the maintainability score. They're usually the first thing a teammate asks about.

*Privacy first*

## Nothing you paste ever leaves your browser

The AI code checker runs every check locally, in JavaScript, on your machine. There's no server call, no AI model reading your macro, no copy stored anywhere. Close the tab and it's gone, the way a tool that touches your work code should behave.

- Zero network requests when you paste or edit code
- No account, no API key, no rate limit
- Works the same for a 5-line snippet or a 200-line module

## Common questions

### Is this AI code checker actually free?

Yes, no signup, no credit card, no daily limit. It runs entirely in your browser, so there's no server cost on our side either.

### What languages does it check?

Any of them, really. The five checks (line length, nesting depth, comments, naming, magic numbers) look at structure, not language-specific syntax, so VBA macros, Google Apps Script, Python, and JavaScript all score the same way.

### Does my code get sent anywhere?

No. Everything runs client-side in your browser tab. Nothing is uploaded, logged, or stored, beyond a single anonymous ping that just counts a tool run.

### How is the 0 to 100 score calculated?

Five checks worth 20 points each: line length, nesting depth, comment ratio, naming, and magic numbers or TODO markers. Add them up and that's your score. No black box, no invented AI verdict.

### Why did my score drop when I added a TODO comment?

TODO and FIXME markers count as maintainability debt. They're useful reminders, but each one is unfinished work sitting in shipped code, so the checker treats it as a small ding, not a crime.

### Can this replace a real linter like ESLint?

No. Think of it as a 10-second gut check before you paste a macro into production, not a replacement for a language-specific linter or a code review.

### My code is deeply nested on purpose, is that a problem?

Sometimes nesting is unavoidable. The checker just flags it so you can decide, it doesn't rewrite your code or judge your architecture choices.

## Want Biscuit to fetch your next formula too?

The AI code checker is free forever. When you're back in a spreadsheet fighting a VLOOKUP or an ARRAYFORMULA, Formula.dog does the same instant, no-signup trick for formulas.

*Call to action: Explore Formula.dog*


## FAQ

### Is this AI code checker actually free?

Yes, no signup, no credit card, no daily limit. It runs entirely in your browser, so there's no server cost on our side either.

### What languages does it check?

Any of them, really. The five checks (line length, nesting depth, comments, naming, magic numbers) look at structure, not language-specific syntax, so VBA macros, Google Apps Script, Python, and JavaScript all score the same way.

### Does my code get sent anywhere?

No. Everything runs client-side in your browser tab. Nothing is uploaded, logged, or stored, beyond a single anonymous ping that just counts a tool run.

### How is the 0 to 100 score calculated?

Five checks worth 20 points each: line length, nesting depth, comment ratio, naming, and magic numbers or TODO markers. Add them up and that's your score. No black box, no invented AI verdict.

### Why did my score drop when I added a TODO comment?

TODO and FIXME markers count as maintainability debt. They're useful reminders, but each one is unfinished work sitting in shipped code, so the checker treats it as a small ding, not a crime.

### Can this replace a real linter like ESLint?

No. Think of it as a 10-second gut check before you paste a macro into production, not a replacement for a language-specific linter or a code review.

### My code is deeply nested on purpose, is that a problem?

Sometimes nesting is unavoidable. The checker just flags it so you can decide, it doesn't rewrite your code or judge your architecture choices.

---

### Excel Formula Generator: Describe It, Biscuit Fetches It

URL: https://formula.dog/tools/excel-formula-generator

> Describe your spreadsheet task and this excel formula generator builds a real, working formula: VLOOKUP, SUMIF, COUNTIF, IF, TEXTJOIN, ROUND, or UNIQUE.

## Excel Formula Generator: Describe It, Biscuit Fetches It

Pick a task, type the cells you already use, and get a real Excel or Google Sheets formula in seconds. No sign-up needed, no formula knowledge required.

## Formula generator

Choose what you need to do, fill in the cells or ranges you already use, and read the finished formula update live below, with a plain-English explanation.

*[Interactive widget — see the live page for the full experience]*

## From plain task to real formula in three steps

### Pick the task

Choose what you are trying to do: look up a value, sum a range under a condition, join text, round a number, or drop duplicates. Biscuit already knows the exact shape each of these formulas needs, argument by argument.

### Fill in your cells

Type the ranges or cell references you already use in your own sheet, such as B:B or Sheet2!A:C. The formula box updates as you type, with no calculate button to click and no page reload.

### Copy the real formula

Get an Excel-and-Sheets-ready formula, plus a plain-English explanation of what each argument does and which Excel version supports it, so you are never just copy-pasting blind.

## Where these formulas come from

1. **Verified syntax** — Every formula uses the documented Excel and Google Sheets function signatures you would also find on Microsoft's own reference pages, or on sites like Exceljet and Contextures.
2. **Tested defaults** — Each task loads with a realistic example already filled in, so you see a working formula before you change a single cell reference of your own.
3. **Version notes included** — Some functions, like TEXTJOIN and UNIQUE, only exist in newer Excel. The generator tells you which version you need, and gives you a fallback for older spreadsheets.

## Common questions about this formula generator

### Is this excel formula generator free to use?

Yes. Everything above runs in your browser for free, with no sign-up and no email required. It covers seven of the formula types people search for most, and there is no daily limit on the generator itself, unlike the rest of the site.

### Does it work in Google Sheets as well as Excel?

Yes, for every task here, with one small difference: UNIQUE has been a stable function in Google Sheets since 2020, while on Excel it needs Microsoft 365 or Excel 2021 or later. Every other formula on this page runs the same way in both, argument for argument.

### What if my exact spreadsheet problem is not in the list?

This generator covers the seven formula shapes people ask for most often. For anything more specific, open the Formula.dog Playground and describe your exact problem in plain English. Biscuit reads the description and fetches a custom Excel or Google Sheets formula for it, five free a day.

### Why do some values get quotes around them and others do not?

Excel treats numbers and text differently inside a formula. Plain numbers and direct cell references stay unquoted, but any text value, such as a status label or a comparison like ">100", needs quotes so Excel reads it as a piece of text instead of a broken reference or a formula error.

### Which Excel version do I need for these formulas?

It depends on the task. VLOOKUP, SUMIF, COUNTIF, IF, and ROUND all work from Excel 2007 onward. TEXTJOIN needs Excel 2019 or Microsoft 365. UNIQUE needs Excel 365 or Excel 2021 or later. The generator prints the exact version requirement under every formula it builds, so you are not left guessing.

### Can I paste the generated formula straight into a cell?

Yes. Use the copy button, click into your target cell in Excel or Sheets, paste, and adjust the cell references so they match your actual sheet layout before you press Enter.

### Does the tool store or send my data anywhere?

No. The whole calculation happens in your browser, using the values you type. Nothing you enter is sent to a server, aside from a single anonymous, IP-free usage ping that only records that the widget was used on this page.

### How is this different from asking an AI chatbot for a formula?

A chatbot can hallucinate a function that does not exist or get an argument order wrong. This generator only ever assembles seven fixed, verified templates, so the syntax is guaranteed correct. For anything outside those seven tasks, the Playground's AI takes over instead.

## Need a formula that is not on this list?

Open the Formula.dog Playground, describe your exact spreadsheet problem in plain English, and Biscuit fetches a custom Excel or Google Sheets formula in seconds.

*Call to action: Open the Playground*


## FAQ

### Is this excel formula generator free to use?

Yes. Everything above runs in your browser for free, with no sign-up and no email required. It covers seven of the formula types people search for most, and there is no daily limit on the generator itself, unlike the rest of the site.

### Does it work in Google Sheets as well as Excel?

Yes, for every task here, with one small difference: UNIQUE has been a stable function in Google Sheets since 2020, while on Excel it needs Microsoft 365 or Excel 2021 or later. Every other formula on this page runs the same way in both, argument for argument.

### What if my exact spreadsheet problem is not in the list?

This generator covers the seven formula shapes people ask for most often. For anything more specific, open the Formula.dog Playground and describe your exact problem in plain English. Biscuit reads the description and fetches a custom Excel or Google Sheets formula for it, five free a day.

### Why do some values get quotes around them and others do not?

Excel treats numbers and text differently inside a formula. Plain numbers and direct cell references stay unquoted, but any text value, such as a status label or a comparison like ">100", needs quotes so Excel reads it as a piece of text instead of a broken reference or a formula error.

### Which Excel version do I need for these formulas?

It depends on the task. VLOOKUP, SUMIF, COUNTIF, IF, and ROUND all work from Excel 2007 onward. TEXTJOIN needs Excel 2019 or Microsoft 365. UNIQUE needs Excel 365 or Excel 2021 or later. The generator prints the exact version requirement under every formula it builds, so you are not left guessing.

### Can I paste the generated formula straight into a cell?

Yes. Use the copy button, click into your target cell in Excel or Sheets, paste, and adjust the cell references so they match your actual sheet layout before you press Enter.

### Does the tool store or send my data anywhere?

No. The whole calculation happens in your browser, using the values you type. Nothing you enter is sent to a server, aside from a single anonymous, IP-free usage ping that only records that the widget was used on this page.

### How is this different from asking an AI chatbot for a formula?

A chatbot can hallucinate a function that does not exist or get an argument order wrong. This generator only ever assembles seven fixed, verified templates, so the syntax is guaranteed correct. For anything outside those seven tasks, the Playground's AI takes over instead.

---
