Singleton vs Transient: Choosing Your Software Design Pattern