> ## Content Index
> Fetch the complete content index at: https://nolongerset.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Defensive Programming - DevCon 2023
- URL: https://nolongerset.com/devcon-2023-bugs/
- Published: 2023-04-27T03:59:00.000Z
- Updated: 2026-05-08T12:50:11.000Z
- Description: Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
- Author: Mike Wolfe
- Tags: Presentations, #Import 2026-05-20 02:59

## Slide Deck

[DefensiveProgramming-DevCon2023.pdf](https://assets.nolongerset.com/2023/DefensiveProgramming-DevCon2023.pdf)

## Further Reading

### High Level Overview

[Some Bugs are Better than OthersNot all bugs are created equal. Avoid the expensive ones by making more of the ones that are easy to find and fix.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/03/car-2122580_1920.jpg)](https://nolongerset.com/some-bugs-are-better-than-others/)

[Syntax ErrorsEvery programming language has its own syntactical quirks. The C family loves braces. Python loves indentation. BASIC loves words. And Perl loves #%@!{}\]&.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/08/vw-4868785_1920.jpg)](https://nolongerset.com/syntax-errors/)

[Compile ErrorsCompile errors are easy to keep out of deployed code (just remember to Debug > Compile). Which is good because they hard crash Access in Runtime mode.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/08/volkswagen-4220406_1920.jpg)](https://nolongerset.com/compile-errors/)

[Misunderstood Requirements in the Project Design PhaseYour client knows what’s wrong. They \*think\* they know how to fix it. But treating symptoms is never as effective as treating the disease.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/08/nature-1284037_1920.jpg)](https://nolongerset.com/misunderstood-requirements-pre-code/)

[Automated Test Errors (aka, Failing Tests)You can have a bug in your code and/or in your test. You’re unlikely to have the \*same\* bug in your code and your test.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/08/volkswagen-1377320_1920.jpg)](https://nolongerset.com/automated-test-errors/)

[Runtime ErrorsIt’s impossible to predict every possible scenario that could befall our applications in the wild. But we need to at least try.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/08/vosvos-1962836_1920.jpg)](https://nolongerset.com/runtime-errors/)

[Misunderstood Requirements (After You’ve Written the Code)As you install the final piece of crown molding in the dog’s second bedroom, you can’t help but smile at the absurdity of it all.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/08/beetle-5523224_1920.jpg)](https://nolongerset.com/misunderstood-requirements-post-code/)

[Logic ErrorsThe logic error is the most dangerous and insidious of all software errors.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/08/cars-884673_1920.jpg)](https://nolongerset.com/logic-errors/)

### Turning Expensive Errors into Cheaper Errors

[Five Ways to Turn Runtime Errors into Compile Errors in VBACompile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2023/04/Runtime-Into-Compile-Errors.jpeg)](https://nolongerset.com/turn-runtime-errors-into-compile-errors/)

[Five Ways to Turn Logic Errors into Runtime Errors in VBARuntime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2023/04/logic-to-runtime-errors.jpeg)](https://nolongerset.com/turn-logic-errors-into-runtime-errors/)

[5 Ways to Reduce Logic Errors Using Automated Double-ChecksIdentify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/10/forest-climbing-park-931256_1920.jpg)](https://nolongerset.com/4-ways-to-reduce-logic-errors-using-automated-double-checks/)

### Additional Reading

[Why You Should Learn to Love Syntax ErrorsThe immediate negative feedback loop that syntax errors provide is a powerful learning tool.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2023/04/learn-to-love-syntax-errors.jpeg)](https://nolongerset.com/learn-to-love-syntax-errors/)

[Data Validity ChecksIncrease the quality of your existing data by running it through a series of validity checks and showing your users the results.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/10/apples-6674608_1920.jpg)](https://nolongerset.com/data-validity-checks/)

[Frictionless Validity ChecksLet’s apply the concept of frictionless development to the defensive programming technique of data validity checks.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/10/ball-bearing-1958083_1920.jpg)](https://nolongerset.com/frictionless-validity-checks/)

[Reduce Logic Errors in Critical CodeSoftware Developers Can Almost Eliminate Logic Errors With This Powerful Technique![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/10/Reducing-Logic-Errors.jpg)](https://nolongerset.com/reduce-logic-errors-in-critical-code/)

[The “Unset” Enum ItemThis simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2021/07/canary-4248324_1920.jpg)](https://nolongerset.com/unset-enum-item/)

[Defensive ProgrammingDon’t build digital Maginot Lines. Program your defenses in depth.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2020/10/Maginot_line_1_downsized.jpg)](https://nolongerset.com/defensive-programming/)

[Spinning Plates: What this Parlor Trick Has in Common with Software DevelopmentThe fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2023/04/plate-spinning.jpeg)](https://nolongerset.com/spinning-plates/)

[Python-inspired Doc Tests in VBADoc tests are not a replacement for unit or integration testing. But they do provide the best return on investment (ROI) of any type of test, mostly because the effort to write them is near zero.![](https://nolongerset.com/favicon.png)No Longer SetMike Wolfe![](https://storage.ghost.io/c/eb/d7/ebd732c1-5f03-4f07-b386-5d08557e15c9/content/images/2020/09/20200921_173427---gbm18---.png)](https://nolongerset.com/python-inspired-doc-tests-in-vba/)

***UPDATE*** *\[2023-05-02\]: Added link to download slide deck.*