It is based on personal preferences, but this may help you to assess what works for you and develop your own style.
Various links to specific solutions/flows in this community,
You will see in past and present examples an evolution from simple flows to advanced flows and various styles.
A number of apps mentioned (eg. Advanced Triggers, Advanced Virtual Devices) are best used when you have some experience in flows.
Avoid starting flows on a certain time, other triggers are preferred.
Avoid dis/enabling flows in a flow
Avoid ALL cards for simplicity
Group triggers and central logic
Split flows into functional parts, connect them with for example “Flow is started with” cards, virtual triggers, advanced device triggers or Advanced Triggers.
Use log (notifications) to trace flows and document them with Note cards. Implement a note color system.
Avoid flows containing app specific devices: Prefer using zones and (advanced) virtual devices or Groups
Use zone timers where you can avoid building your own timer
Use advanced flows. Limit the use of simple flows in case you may have to change them on your mobile app. Align cards in advanced flows consistently so you can read them back efficiently in the future.
As timer (that can be interrupted) use Chronograph , avoid the built in Delay timers
Did I mention to use zone cards where possible? (WHEN, AND, THEN) Great for motion, alarms, devices, etc.
Examples:
(use Chrome automatic translate to English for Dutch examples) (edited)