When you use React, don't always depend on useEffect. Instead, try useMemo or useCallback to avoid infinite re-rendering.
Using dependency injection helps to organize the codebase and create a separation of concerns. That's where Google's Hilt comes into play.
Yarn workspaces organize a monorepo into logically distinct parts and keep scripts and dependencies organized.
A light-weight approach to mocking core functionality in system tests with Hilt using Kotlin. (The same concepts would apply with Java.)