The Three " R ' s " of Mature System Development : Reuse , Reengineering , and Architecture