Triggers are one of those database features that feel like cheating the first time you use one. Write a little procedure, attach it to a table, and the database quietly does the work for you on every insert, update, or delete. No application code to remember, no forgotten call site.
That same quietness is the problem. A trigger you wrote months ago is invisible in the diff, invisible in the stack trace, and perfectly happy to keep running long after you stopped thinking about it. Here is where I have found them genuinely worth the trouble, where I now reach for plain application code instead, and what I wish I had known before letting the schema start making decisions on my behalf.