Test Double
How to Program (Justin Searls)
updated
We used to feel like we were different, and now we know we're certifiably different: Test Double is certified Evergreen by the Tugboat Institute.
Find out more about the seven principles of Certified Evergreen companies:
00:00 The humble evergreen
00:47 Evergreen businesses
01:17 Purpose
01:37 Perseverance
02:02 People First
02:24 Private
02:48 Profit
03:07 Paced Growth
03:25 Pragmatic Innovation
04:09 Test Double is certifiably different
You can see a few of Justin's past talks on YouTube:
* How to Program youtube.com/watch?v=rm8RYzrVkFA
* How to Stop Hating Your Tests youtube.com/watch?v=jmPcVTHmdVo
* The Selfish Programmer youtube.com/watch?v=XvQxfMBp50k
* The Social Coding Contract youtube.com/watch?v=HFRU6eQKp4Y
Read more here: http://blog.testdouble.com/talks/2023-12-12-how-to-start-speaking-at-conferences
We're seeking a marketer who is skilled in:
- 💫 creative copywriting
- 🔎 empathetic editing
- 💻 pragmatic promotion
You might be a good fit as Senior Content Manager at Test Double if ...
1. You seamlessly shift from SEO to editing video to social copy—and you're driven to navigate how content evolves.
2. You coach people to improve their content through editing—and you help them sharpen what they have to say.
3. You apply a growth mindset to promoting content—and you seek out content marketing tools for low-friction results.
More info about working at Test Double: link.testdouble.com/sr-content-mgr-info
Apply: link.testdouble.com/sr-content-manager-job-post
There is a large array of tools, libraries, and resources available that help facilitate the construction of ML models for Rubyists, and the list keeps growing. Now has never been a better time to dive into machine learning and build interesting projects. It is clear that AI has dramatically shaped the software industry. As such, it makes sense that Rubyists will also partake in these rapidly evolving technologies and create tools and applications never before thought possible!
More info and resources on the Test Double blog at blog.testdouble.com/talks/2023-07-24-forecasting-the-future
- continue feature work
- deliver predictable results
- seamlessly jump into the next upgrade (because there’s always a next upgrade)
And Ali is gonna show you how.
In the years since he's worked on upgrading Rails at GitHub, Ali refined an approach to Rails upgrades and successfully implemented it at several organizations. In this talk, you’ll learn everything you need to burn down uncertainty and boldly go into your next Rails upgrade.
More on the Test Double blog, including resources, at blog.testdouble.com/talks/2023-07-23-zero-downtime-rails-upgrades
If we try to approach legacy code with a fresh perspective, we can find opportunities to smooth out the rough edges and make it easier for other devs, and our future selves to work with.
If we don't, we risk pushing ourselves and the team we're on into a salty mindset, and towards burnout.
By eternally onboarding to a legacy system, we can help take pressure off our code so it's not responsible for things code is bad at doing.
More on the Test Double blog at blog.testdouble.com/talks/2023-07-19-end-of-legacy-code
In this talk, @JustinSearls & Meagan Waller worked with the audience to lay the groundwork for Standard Ruby’s first plugin: standard-rails. Together, we crowdsourced some of the thorniest questions once and for all, saving your (and every other) Rails team the time of having to do it all over again. Try it yourself at github.com/standardrb/standard-rails
More on the Test Double blog at blog.testdouble.com/talks/2023-05-30-lets-standardize-rails
I hope you'll come! For more of our coverage on RubyKaigi, check out our Field Report blog.testdouble.com/field-reports/ruby-kaigi
Over the past six years he's transformed Kaigi into a traveling conference that has introduced countless domestic and international Rubyists to new cities in Japan like Kyoto, Fukuoka, and now Matsumoto. While I couldn't get him to divulge the location of next year's conference (we'll have to wait for tomorrow), if you've ever been interested in coming to the conference, I hope you'll consider watching to understand his goals and priorities in the design of each event!
You can follow our ongoing RubyKaigi 2023 coverage at @TestDouble's blog here: blog.testdouble.com/field-reports/ruby-kaigi
This interview was part of @TestDouble's Field Report for the event. Check it out here: blog.testdouble.com/field-reports/ruby-kaigi
About Standard Ruby: github.com/testdouble/standard
About Test Double: testdouble.com/agency
#shorts
About Standard Ruby: github.com/testdouble/standard
About Test Double: testdouble.com/agency
their own company? @JustinSearls is about to find out!
Read about it at blog.testdouble.com/talks/2023-02-28-what-is-a-meta-programmer
[01:48] Cyclical Learning Overview
[02:19] 1. Observe
[04:18] 2. Capture
[09:33] 3. Focus
[12:18] 4. Understand
[13:40] 5. Practice
[15:17] 6. Reflect
[17:01] 7. Record
[20:08] 8. Share
[21:37] Review and putting it into practice
This screencast is also available on the Test Double blog at blog.testdouble.com/talks/2023-02-01-sustainable-learning
Resources:
- Making Badass Developers by Kathy Sierra - youtu.be/FKTxC9pl-WM
- Perceptual Learning == More Ruby Experts? by Stefanni Brasil - youtu.be/m_MtR3p3hJ4
- Optimize for Learning - bignerdranch.com/blog/becoming-a-nerd-one-developers-journey
- Notion - https://www.notion.so
- Obsidian - https://obsidian.md
- Logseq - logseq.com
- Pocket - getpocket.com
- Paint Drip Developer by Bob Marshall - flowchainsensei.wordpress.com/2021/07/28/kent-becks-paint-drip-people
- Exercism - exercism.org
- GitHub Wikis - docs.github.com/en/communities/documenting-your-project-with-wikis/about-wikis
Legacy systems are unwound and detangled. Teams emerge happier and healthier. Leaders get maintainable software at a sustainable pace.
We embed with teams who care about great code. Is that you?
More about what we do at link.testdouble.com/get-to-a-better-place
Burst capacity to hit today's deadlines, strategies to make tomorrow's goals attainable. We get your team unblocked, accelerate software delivery, and improve things along the way.
We embed with teams who care about great code. Is that you?
More about what we do at link.testdouble.com/do-more-with-less-work-smarter
This video provides a brief overview of one way to organize a personal blog that's structurally similar to daringfireball.net—allowing for short-and-sweet posts—but with modern architecture of Hugo for static site generation, Tailwind for styling, and Netlify (plus NetlifyCMS) for hosting and on-the-go publishing—enabling very low-friction publishing.
* Hugo - gohugo.io
* Tailwind - tailwindcss.com
* Netlify - netlify.com
* NetlifyCMS - netlifycms.org
* Justin's CSS overrides to make NetlifyCMS more mobile-friendly -gist.github.com/searls/7fd2c3223571a58a81006e7da66bd064
This video shows off a common (but little-discussed) technique for building `sort_by` blocks that return prioritized arrays of values and then demonstrates how our new Put gem can accomplish the same thing with a cleaner and more expressive API that provides nil safety.
Check out the Put gem for yourself: github.com/testdouble/put
This video's example code lives here: github.com/testdouble/put_example
Read more about Put at our blog: blog.testdouble.com/talks/2022-09-28-a-better-way-to-sort-ruby-objects
CHAPTERS
00:00 – Introduction
02:10 – Using Enumerable#sort_by with multiple conditions
12:10 – How to use the Put gem
• Ruby 3.1 announcement: ruby-lang.org/en/news/2021/12/25/ruby-3-1-0-released
• The vscode-rdbg extension: marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg
• Rails 7 announcement: rubyonrails.org/2021/12/15/Rails-7-fulfilling-a-vision
See more at our blog here: blog.testdouble.com/talks/2022-08-22-debugging-ruby-on-rails-with-vscode
More info here: blog.testdouble.com/talks/2022-05-18-please-mock-me
If you’re looking for another talk on this topic, consider watching the companion talk, Please don’t mock me: blog.testdouble.com/talks/2018-03-06-please-dont-mock-me It’s a much longer talk, and so it takes the time needed to discuss some of the patterns and pitfalls to keep in mind when using test doubles in your tests.
Chapters
00:00 Intro
00:09 Recap of previous video
00:21 Learning goals for this video
00:36 Reminder instructions for running demo app and Cypress test suite
00:48 Identifying duplicate `cy.visit` calls in each end-to-end test
01:17 Make `cy.visit` automatically run before each test with `beforeEach`
01:55 Cypress ensures `cy.visit` completes before running each test
02:02 Remove previously duplicated `cy.visit` calls and save
02:07 Verify end-to-end tests still visit initial page and run successfully
02:15 Expand Cypress command log to see the`visit` command inside BEFORE EACH
02:32 Duplicating hardcoded URLs can make Cypress test suites unmaintainable
02:55 Configuring Cypress to know the base URL for all visited URL paths
03:05 Explaining the cypress.json file for configuring Cypress test suites
03:24 Add the `baseUrl` to cypress.json
03:45 Save file to see Cypress reload the spec file list
04:01 Replace URL in end-to-end spec file with root path / and save
04:12 Open up spec file again from Cypress list of spec files
04:17 Verify end-to-end tests run successfully
04:35 Link to other configuration options available in cypress.json
04:43 Recapping what you learned
04:59 Summary of different ways duplication affects Cypress test suites
05:17 Conclusion and next module teaser
Additional resources:
Configuring Cypress: docs.cypress.io/guides/references/configuration
Find out more about Test Double at link.testdouble.com/more-info
Chapters
00:00 Intro
00:09 Recap of previous video
00:19 Learning goals for this video
00:39 Reminder instructions for running demo app and Cypress test suite
00:51 Identifying another user scenario for a happy path end-to-end test
01:22 Copy and paste a previous end-to-end test for the new test
01:30 Use `it.only` to temporarily only run the new test
01:37 Modify pasted Cypress test for the new user scenario under test
02:16 Save file to verify new happy path test runs successfully
02:29 Reminder that end-to-end tests are slow
02:43 Use `it.only` to additionally run the previous “update task” test
02:59 Analyzing Cypress end-to-end test suite runtime
03:23 How slow end-to-end tests impact developer productivity and builds
03:39 How to balance testing all user scenarios with the quantity of end-to-end tests
03:50 Identifying duplicated paths in similar end-to-end tests
04:26 Create a combined end-to-end test
05:08 Save file to verify combined happy path Cypress test runs successfully
05:18 Why combined happy path tests help speed up end-to-end test suites
05:37 Remove previous similar end-to-end tests and remove `it.only`
05:44 Recapping what you learned
06:15 Conclusion and next video teaser
Find out more about Test Double at link.testdouble.com/more-info
Chapters
00:00 Intro
00:09 Recap of previous video
00:20 Learning goals for this video
00:31 What is the DRY principle (Don’t Repeat Yourself)
00:46 Problems with updating duplicated code in multiple places
00:58 Using code abstractions to reduce the amount of duplication
01:09 How does code duplication lead to issues in end-to-end tests
01:28 Reminder instructions for running demo app and Cypress test suite
01:40 How to identify the duplicated code in the current Cypress end-to-end tests
01:55 How to create a reusable helper function for end-to-end test setup code
02:09 How to replace duplicated test setup with the reusable helper function
02:17 Save file to verify Cypress end-to-end tests still pass
02:29 Recapping what you learned
02:46 Conclusion and next video teaser
Find out more about Test Double at link.testdouble.com/more-info
You will also:
- learn the dangers of saving persisted state between different tests
- run specific tests with `it.only`
- clear text inputs with the Cypress `clear` command
- write explicit assertions with the Cypress `should` command
Chapters
00:00 Intro
00:09 Recap of previous video
00:25 Learning goals for this video
00:49 Reminder instructions for running demo app and Cypress test suite
01:00 How to identify a new happy path end-to-end test for demo app
01:16 Demo app backend server clears state on boot
01:24 Dangers of sharing persisted state between end-to-end tests
01:51 Isolating Cypress test state from other end-to-end tests
01:59 How to add new happy path end-to-end test with `it.only`
02:19 How to fill in setup code for new happy path test
02:58 Save file to verify setup code runs in the new test
03:03 Start adding actual test code to the happy path end-to-end test
03:26 Using Cypress’ `clear` command to clear a text input
03:43 How to add test assertions to the new happy path end-to-end test
03:56 Using Cypress’ `should` command for explicit assertions
04:26 Link for other Cypress assertion commands
04:31 Save file to verify new happy path test runs successfully
04:40 Change `it.only` back to `it` so all end-to-end tests run
04:46 Recapping what you learned
05:04 Conclusion and next video teaser
Find out more about Test Double at link.testdouble.com/more-info
You will also:
- use Cypress commands such as `click` and `type` for interacting with forms
- use other kinds of selectors with Cypress’ `get` command
- learn the best kinds of selectors to use with `get` and why CSS classes are not good selector candidates
Chapters
00:00 Intro
00:09 Recap of previous video
00:14 Goals for writing your first Cypress happy path end-to-end test
00:33 Reminder instructions for installing and running demo app
00:47 Reminder to run the previous tasks.spec.js file
00:57 How to identify the first candidate happy path end-to-end test
01:12 Open spec file and start writing new test
01:25 How to find elements by text with the contains command
01:50 Matching actual text in the DOM, not CSS transformed text
02:16 How Cypress matches text with case sensitivity
02:26 Cypress alternatives to match text with case insensitivity
02:36 Use Cypress’ `click` command to click elements
02:40 Cypress commands like `click` are child commands
02:55 Save file to run new test and perform Cypress `click` command
03:03 Order of end-to-end tests in Cypress test results
03:11 Reviewing the result of clicking
03:15 Inspect the app inside Cypress using browser devtools
03:35 Using devtools to identify attributes to use to select an element
03:42 Mention of Cypress’ selector playground for inspecting elements
04:04 Selecting an element by an HTML attribute with Cypress `get` command
04:15 Using Cypress child command `type` to type text like a real user
04:29 Save file to rerun end-to-end test and see text typed into input
04:35 Challenges with database persistence and running end-to-end tests multiple times
05:05 Type unique titles to avoid selecting results from previous test runs
05:38 Save file to rerun end-to-end test and see Cypress type unique title
05:42 Using devtools in Cypress to find a selector for a select element
05:59 Recommendations for kinds of selectors to use
06:11 Issues with using CSS classes for selecting elements
06:23 Accounting for when selecting by text could be error-prone
06:36 Using specific attributes like `id` for selecting elements
06:55 Selecting and clicking the select element by `id`
07:06 Finding and clicking a select option element by its text
07:13 Save file to rerun end-to-end test and see Cypress select an option
07:21 Using devtools to find a selector for a textarea element
07:35 Selecting textarea by HTML attribute and typing a description
07:45 Save file to rerun end-to-end test and see Cypress type a description
07:49 Using devtools to find a selector for another select element
08:05 Finding select element by `id` attribute and clicking
08:11 Finding and clicking a select option element by its text again
08:17 Save file to rerun end-to-end test and see Cypress select an option again
08:23 Selecting a button by text and clicking it
08:33 Reminder about selecting text by case sensitivity
08:42 Save file to rerun end-to-end test and see saved task with success message
08:55 Adding a Cypress assertion to verify a task was created
09:21 Determining a selector to verify the specific task was created
09:30 Using `id` to select the project column that should contain the new task
09:41 Reminder of using unique titles to avoid selecting tasks from previous tests
09:51 Save file to rerun end-to-end test and verify task was created properly
10:04 Recapping what you learned
10:29 Conclusion and next video teaser
Find out more about Test Double at link.testdouble.com/more-info
You will learn:
- what real-world, happy path tests are
- what unhappy path tests are
- why end-to-end tests should cover realistic, happy path scenarios and align with business requirements
- how testing every scenario in your application can hurt test suite performance and maintainability
Chapters
00:00 Intro
00:09 Recap of previous video
00:24 What you will learn about real-world end-to-end tests
00:43 What are real-world end-to-end tests
01:00 Multiple steps in real-world end-to-end tests with an example
01:33 Why end-to-end tests are sometimes called feature tests
01:50 Multiple steps in an end-to-end test help with test suite speed
02:15 What are happy path end-to-end tests
02:39 What are unhappy path end-to-end tests
02:50 Why testing all scenarios slows down end-to-end tests
03:01 Why testing all scenarios creates more end-to-end tests to debug
03:31 Test Double’s recommendations on the best kinds of end-to-end tests
03:42 Recapping what you learned
03:59 Conclusion and next video teaser
Find out more about Test Double at link.testdouble.com/more-info
Image Attributions:
pixabay.com/vectors/tag-badge-logo-medal-tape-763169
pixabay.com/vectors/pixel-cells-pixel-social-network-3704049
pixabay.com/vectors/pixel-pixel-cells-away-landscape-3699343
pixabay.com/illustrations/caricature-painting-fantasy-5266197
pixabay.com/vectors/pixel-cells-emotion-confused-6230199
pixabay.com/vectors/pixel-cells-seminar-conference-3974170
pixabay.com/vectors/pixel-cells-help-assistance-3974184
You will learn how to:
- set up a demo application to test against
- install Cypress and initialize a new Cypress end-to-end test suite
- create a new Cypress end-to-end test file
- use Cypress commands and default assertions to create your first test
- view test run results in Cypress
Cypress Version Notice: at the time this video was recorded, Cypress was at version 7.5.0. Since then Cypress has released newer versions. Test Double recommends still installing Cypress 7.5.0 as the video directs, but the test suite in this video should still run with the newest version of Cypress. Should you run into any issues installing Cypress, Test Double can only offer support if you install version 7.5.0.
Initializing Test Suite Notice: after running `npx cypress open`, you may see a message that no version of Cypress is installed in your computer’s apps. If that happens, you can run `npx cypress install` to install the Cypress app, and then run `npx cypress open` after that.
Chapters
00:00 Intro
00:10 Recap of previous video
00:18 Goals for getting started writing end-to-end tests with Cypress
00:30 Introducing the demo app
00:56 Forking the demo app repo
01:25 Clone forked demo app repo
01:42 Install dependencies and run demo app
02:08 Trying out the demo app
02:51 Run server in end-to-end test environment
03:19 Install Cypress
03:52 Open Cypress to initialize end-to-end tests
04:20 Getting familiar with the Cypress app window
04:30 Running an example Cypress end-to-end test
04:53 Reviewing Cypress end-to-end test run results
04:59 Stopping Cypress end-to-end test
05:12 Inspecting Cypress file and directory artifacts
05:44 Creating a new Cypress end-to-end test file
06:13 Adding a new end-to-end test
06:26 Cypress’ global cy object
06:36 Cypress commands via the cy object
06:40 Cypress visit command
06:49 Using Cypress app window to run a new end-to-end test file
07:17 Using Cypress selector commands
07:30 Cypress get command
07:36 Cypress contains command
07:41 Chaining Cypress commands
07:56 Save to rerun the Cypress end-to-end test
08:03 Reviewing log of Cypress commands ran during an end-to-end test
08:14 Cypress default assertions as commands
08:51 Intentionally breaking test to inspect Cypress end-to-end test failures
09:05 Restoring the broken end-to-end test
09:11 Adding more default assertions via commands
09:32 Recapping what you learned
09:56 Conclusion and next video teaser
Find out more about Test Double at link.testdouble.com/more-info
In this video, receive an introduction to the world of end-to-end testing with Cypress. You will learn who Test Double is and why we love Cypress, how end-to-end tests fit in the testing pyramid, the pros and cons of end-to-end tests, and what you should expect from this series. By the end of this video, you will understand what end-to-end tests are and why Cypress makes writing them familiar and fun.
Chapters
00:00 Intro
00:14 Test Double’s Mission
00:45 Contact Test Double
00:53 Test Double and Cypress
01:13 What are end-to-end tests?
01:21 Testing Pyramid and end-to-end tests
01:37 Cons of end-to-end tests
01:58 Pros of Cypress end-to-end testing
02:59 Who can benefit from end-to-end testing with Cypress
03:37 What to expect in this series on end-to-end tests with Cypress
04:19 Prerequisites
05:13 What you will learn from this video series
05:54 Conclusion and next video teaser
Find out more about Test Double at link.testdouble.com/more-info
Image Attributions:
pixabay.com/illustrations/hook-check-mark-done-yes-consent-2470296
pixabay.com/vectors/tag-badge-logo-medal-tape-763169
This talk was presented as a whimsy session at Ruby Conf 2021.
00:04 Inspiration behind this music box project
00:42 Requirements for the project
01:36 Really complicated solution to this problem
02:17 Is Raspberry Pi the best option for the music box?
03:00 The only thing missing is free time
03:25 Hackathon at work
04:27 Turning to pairing when you're stuck
05:12 Catching the bread board problem
06:04 Pivoting to Adafruit sound board
06:58 Turning to pairing to talk through electrical wiring
08:13 Making the music box
09:23 Does the music box work?
This talk is a reflection on the far-reaching consequences distrust can have for individuals, teams, and organizations and an exploration of what we stand to gain by adopting a more trustful orientation towards ourselves and each other.
Full description and transcript here: blog.testdouble.com/talks/2022-02-09-how-to-trust-again
This talk was presented at VimConf 2021 by Camilo Payan.
00:00 Introduction
00:17 Introducing StandardRB tasks
00:41 Movements
01:16 Macros
01:47 Basic macro demonstration
02:36 Appending to a macro
03:12 Vim registers
03:40 Editing macros using registers
04:00 Inline vim movements
05:56 Prefixes for macros
06:58 Suffixes for macros
08:34 Creating a table of contents for a README file
09:06 Marks and jumps
12:17 Recursive macros
13:40 Lazy redraw
14:16 Thank you!
15:14 Questions and answers
This presentation was presented at RubyConf 2021 by Justin Searls.
More at our blog: blog.testdouble.com/talks/2021-06-03-how-to-find-and-remove-dead-css
More details at our blog: blog.testdouble.com/talks/2020-05-28-setting-up-a-new-mac-for-development
Chapters:
0:00 Live coding with Parcel Bundler
0:03 Introduction
4:34 Begin Screencast; Inital Project and build HTML with Parcel
9:01 Add PostCSS and Tailwind CSS
15:32 Purge unused CSS rules
19:31 Basic JavaScript build
24:11 Add React to your build
31:24 Add Vue to your build
37:58 Add images
43:14 Simple explanation of Parcel's build approach
46:11 ONE MORE THING: Code-splitting with React
50:50 Conclusion and Summary
More details on the Test Double Blog: blog.testdouble.com/talks/2020-05-21-parcel-js-bundler
Website: testdouble.com
Twitter:
Tommy Groshong: twitter.com/tgroshon
Test Double: twitter.com/testdouble
Example Code: github.com/testdouble/react-routing-example
Website: testdouble.com
Twitter:
Tommy Groshong: twitter.com/tgroshon
Test Double: twitter.com/testdouble
This talk is an exploration of how to reverse the velocity spiral by building high trust relationships with management. We’ll discuss root causes of our distrust like estimation, communication, and abuse of power so that the team can resist short sighted solutions that will plague them for years to come.
More here: blog.testdouble.com/talks/2017-05-31-under-pressure
More here: blog.testdouble.com/talks/2017-01-27-a-better-technical-interview
More here: blog.testdouble.com/talks/2017-10-06-solving-the-boolean-identity-crisis
Objects and functions sure are convenient, so convenient that we do many shortsighted things just because they’re easy.
In-line objects and anonymous functions create a poor signal to noise ratio, making it hard to understand your code.
Learn ways to give confusing things names, focus on what’s important, and write nicer code.
More here: blog.testdouble.com/talks/2018-05-02-javascript-is-too-convenient
More here: blog.testdouble.com/talks/2017-05-31-going-to-eleven
As a project grows up, it has different needs and benefits from differing levels of “discipline”. Likewise, people have differing comfort levels for process rigor.
Too often we focus on the laundry list of benefits that we might get from a tool without considering the maturity of our project or the composition of the team. We want to build shared understanding without dictating a process that crushes diverse thought and collaboration.
This talk proposes examples as a universal way to build shared understanding without tying a team to specific tools or implementations.
More here: blog.testdouble.com/talks/2017-05-18-shared_understanding
If you neglect to write React tests because you don’t know what to test, which types of tests provide the most value, or how to start testing, then this talk will guide your path. I explain the difference among unit, isolation, and end-to-end tests, and provide a general framework for how to test your application.
You will learn about the testing framework Jest, how to test-drive components with Enzyme for design feedback, the magic and trade-offs of snapshot testing, how to unit and integration test your reducer and actions, and how to test your entire application in a browser by simulating user scenarios. Of course, I offer both pros and cons to each type of test, so you and your team can discover what works best for you. You will also learn how to use our nifty testdouble.js library.
More here: blog.testdouble.com/talks/2018-04-09-effective-react-testing
We will compare solutions in Ruby to solutions in Haskell, and each stop on our trip will introduce a new mind-blowing paradigm brought to you by Haskell’s type system. You will learn about type systems through a non-threatening story, and you’ll understand the value a type system can bring to your code. Key stops on our route will be “forget about nil”, “declaratively model your domain”, and “allow your compiler to drive your design”.
More here: blog.testdouble.com/talks/2017-01-18-life-after-nil
How can we challenge our natural human bias? I’ve spent the last couple years digging into “pop” psychology and thinking about how books like “Thinking Fast and Slow”, “Antifragile”, “Drive”, “Blink”, and “Outliers” apply in a software development environment. I’m most excited about the idea that if we can make failure “safe” then we can use it to learn things that we would otherwise be tempted to avoid and ignore because it might go badly. A focus on failure, both deliberate and accidental, has been beneficial in moving my projects beyond the no defects, 100% test coverage type focus and towards finding innovative ways to detect and quickly reverse failure.
More here: blog.testdouble.com/talks/2017-07-31-looking-for-failure