https://www.amazon.com/Working-Effectively-Legacy-Michael-Fe...
In particular that book considers the problem of retrofitting an existing system to have good tests, so it covers all the bases for a system that runs in production and is in front of customers. Feathers is particularly an advocate for fast tests, he thinks a 1ms test is a little slow.
A counter to that is some subsystems are prone to race conditions and a necessary test could be to stress the subsystem with 200 threads. This automated test is of great value but takes 30 seconds to run which is quick to do once but adds up to slower development cycles when you make any change.
Consider embracing a Risk Driven Development[0] philosophy.
This is where the highest risk to a project's success is addressed first, then the next highest, and so on, which drives risk to 0 and success to 1.
This begs the question, "what is typically the highest risk to a project's success?" This is always defining the (stakeholder) problem to solve. IOW, what would be the result if everyone involved had perfect knowledge of what needs to be done? From there, identification of what needs to be done next (risks/tasks/work/etc.) will flow.
Note that risks include non-technical concerns. Many times these are some of the biggest risks.
HTH
0 - https://www.methodsandtools.com/archive/agilesoftwarearchite...
The Hypothesis library for Python has a pretty good docs explaining property-based testing and how to use it.