I do not trust origin stories. Mine is ordinary: PHP, websites, then backends that had to stay up, then more of that for a long time.
What changed is not that I became clever. What changed is which mistakes I can smell from further away.
Simple and easy are not the same
Easy code is what I can type before lunch. Simple code is what still makes sense after eighteen months and a different author. They overlap less than I wanted them to.
Clever caching is easy. A boring table with a clear invalidation path is simple.
Production is a teacher with no patience
Staging lies. Local lies harder. Production has the only data set that includes “that one customer” and “that one timezone” and “the job that ran during the deploy”.
I debug faster now because I assume the first explanation is social - it must be the last commit - and the real one is often older: a timeout, a header, a worker that never started.
Reliability ate elegance
I still like elegant code. I like it less than I like being able to reverse a dangerous operation. Soft delete is not an audit trail. A successful HTTP call is not a completed business process.
I am slower to reach for a new abstraction
Abstractions are expensive. They have to earn rent: fewer mistakes, a clearer boundary, a place where a vendor can be replaced without a rewrite. “It might be useful later” is how I used to create museums.
Learning did not stop when I got the title
C++, Qt, vector databases are labelled learning on this site. That is the whole point of the label.