Yes there are domains where performance is likely to be more of an issue; though not every program targets generic devices.
I work on tools ( compilers, profilers and the like ) and OSes for real-time systems some of which that had way less power and memory than modern smart phones. O(n) is awesome when you can get it but not required or possible everywhere. It's very easy to have one apparently O(n) algorithm call another O(n) algorithm even indirectly ending up with an O(n^2). In any large system complexity is easily hidden between layers, just knowing the big-O of the piece you are working on isn't enough. It's why profilers are so important. Avoid writing code that you know will be slow; but where performance may matter ( and it matters more then many may think ) the only thing to do is to test; ideally a separate tester with both real world and fuzzed data. Likewise the people I know that rewrite software for embedded devices or game consoles don't need to worry about their code running on a machine with lower specs.
That said I always did get a kick out of what happened when you took ancient code that had empty-loops for timing as was common in the 80s and ran it on more modern hardware. And yes tuned code still happens in modern systems, for example some times it actually makes since to ensure the best and worse cases are identical in performance; e.g. to avoid a side-channel attack.