It's written in Python (because they wanted to attract developers) and it doesn't allow for pre- and postinstall scripts, nor does it allow pre- and postremove scripts. If you're doing very large scale configuration management with OS packaging, you're screwed really deep and really hard, because with IPS, all of that pre- and postinstall as well as pre- and postremove scripting has to be completely redesigned into self-assembly SMF methods, which is a gargantuan, extremely financially expensive effort.
It's slow, so the core parts had to be rewritten in C. Might as well have started with C to begin with.
Since they didn't want to allow scripting, they had to put in special hacks like "actuators" and driver hooks. At which point they might as well have put in scripting, but no, they remained stubborn. Another big sin. It's because both Hahn and Smaalders were/are for some bizarre reason absolutely convinced that scripting in packaging is bad and fragile, which is utter nonsense. So wrong assumption begat wrong, busted architectural decisions.
The design was actually an experiment by one Dr. Stephen Hahn. It had some good ideas like delta in-place upgrades (like SGI IRIX's inst(1M)), and incorporations (like IRIX inst(1M)'s depots) but the implementation sucks so horribly, with such horrible technical choices as Python that it should have never made it past the prototype stage. Apart from OmniOS and OpenIndiana, it is shunned by other mainstream illumos-based operating systems.
The automated installer which leverages it and was meant to replace JumpStart(TM) is an overcomplicated disaster.
The biggest sin of IPS though, is collateral damage: because IPS is so architecturally busted, sparse zones, a truly revolutionary and phenomenally useful capability had to be abandoned (to be brought back in SmartOS, thankfully).
I hate IPS with the burning passion of 30 trillion suns. Thanks, Dr. Stephen Hahn & Co.!
Post scriptum: I kept trying to tell them to license IRIX's inst(1M). They kept ignoring me. Now inst(1M) is bit rotting away in some vault and IPS is an obscure packaging mechanism preventing OmniOS from reaching its adoption potential. All around win-win.