Minecraft server time is affected mostly by the following categories:
<aside> 💡
Redstone and observers can trigger multiple neighbor updates.
</aside>
<aside> 🔄
Hoppers (Unlocked), Droppers (when clocked), furnaces, etc. Are processed every tick if left running.
</aside>
<aside> 👾
Entity AI/pathfinding, collisions and physics are expensive.
</aside>
<aside> 🔄
If a chunk is left loaded, everything inside it will be ticked as well.
</aside>
Redstone dust creates neighbor updates, long dust lines that are constantly triggered multiply those updates across many blocks. Keep dust for short pathways, use update based transmission with observers across long distances.

<aside> ⚠️ Rails can be used as a low-overhead medium to carry an update. Observers can detect that update at the far end without needing a long dust chain that flashes.
</aside>
<aside> 🎫
One example of this is utilizing a leaf update to check for tree growth on a tree farm.
</aside>
Pistons and moving-block contraptions create a lot of updates and can cascade into neighboring systems.

<aside> 🚨 For vertical signals, try to avoid moving pistons and slime blocks, opt for something such as vertical signal transmission with walls and observers, scaffolding, bubble columns, etc.
</aside>