Andrew Connell walks through the Office 365 Patterns & Practices Scenario creating Sub Sites using an App for SharePoint. This code can be found on GitHub here https://github.com/OfficeDev/PnP/tree/master/Samples/Provisioning.SubSiteCreationApp
This solution uses so called remote provisioning pattern to provide as flexible sub site template system as possible. Old models using either site definitions, web templates or feature stapling will cause challenges with the evergreen model, meaning more frequent releases of new capability to the cloud and on-premises.
Using remove provisioning pattern will initially require additional code, but since sites created using it are always based on out of the box site definitions, we don’t need to perform any updates when new capabilities are stapled to out of the box templates. This will have significantly reduce the long term maintenance costs for the solution.
Additional information related on the different site provisioning options can be found from following blog posts.