Oh hey something I actually studied as a part of my career path.
Lotus in particular was big on writing everything in assembly for maximum performance. Writing in assembly takes forever, however, and compiled languages slowly gained on assembly in terms of performance. To the point where even in the late 90's, I was told that trying to outsmart my compiler about which variables it should try to keep in the register was probably a bad idea.
Compare this philosophy to a Visual Basic manual that Microsoft published in the same period. I'm paraphrasing, but it was written with complete seriousness, and reflects Microsoft's strategy 20 years ago:
"Of course your program will be buggier and perform slower than a well-tested piece of software written in C, much less assembly. However, you will ship your software to your customers first, and that is what matters."
Versus Borland, Microsoft also went poaching key talent (I recall one star programmer was offered 3 million a year - in the 90's), but I don't know offhand if they did the same with Lotus. Nonetheless, poaching alone would not have been sufficient as a strategy, compared to taking an active policy of facilitating rapid, aggressive release schedules.
Follow-up question prompted by OP's musings - is there any credence to the claim that in the early 80s, Gates once stated "DOS ain't done till Lotus won't run?"
Microsoft typically followed the mantra: Embrace, Extend, Extinguish where you embrace a competitors product, then extend its features slowly making their product incompatible with your extended feature set and eventually cutting them off which 'extinguishes' them.
https://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish