The stack you choose should depend upon the needs of your application. Let’s look at Play vs. Node for their strengths:
Node
- Real-time applications (chat, feeds)
- Event-driven architecture
- Can perform client-server duties (e.g. serve files), but not well-suited for this
- Database management, testing tools, etc, available as additional packages
Play!
- Client-server applications (website, services)
- Share-nothing architecture
- Can perform real-time duties (e.g. Websockets), but not well-suited for this
- Database management (including migrations!), testing tools, etc, built into core
If your application more closely matches a traditional web-based model, Play is probably your best choice. If you need immediate feedback and real-time dynamic messaging, Node is the better choice.
For large traditional applications, seriously consider the Play! Framework because of the built-in unit and functional testing along with database migrations. If incorporated into the development process, these go a long way toward an end product that works as expected and is stable and error-free.