- Current implementation isn't enough and can't be easily adjusted to your needs.
- Current implementation is totally crap and you need implement it from scratch.
- You have a lot of time or money and can do it better (don't even dream about time).
- You can really make it better.
Anyway, to identify any of those there is one big prerequirement: you have to know about existing solutions: designs, architectures and libraries!