While Phish is a somewhat simple program, and thus has a somewhat simplified design, we have detailed along the way a number of classes and their interactions. The task now is to turn that design into C++. Along the way, there are a number of language-specific questions that must be answered, and we must constantly trade off generalized extensible solutions against quick-to-market corner-cutting "hacks".
My personal approach to software development is to create a small working core of functionality, and then to extend that functionality, testing each enhancement as I progress. It is important that at virtually every stage of implementation the product continues to work, though some aspects may be "stubbed out" as interim steps along the way to full functionality.