Position your windows how you desire, then run the following AppleScript for each application.
tell application "Terminal" to tell window 1 to get bounds
This will return the bounds of the window, such as:
{200, 200, 700, 700}
Once you have your bounds of each window you wish to include in your specific window layout set, use the following to set the bounds:
tell application "Terminal" to tell window 1 to set bounds to {200, 200, 700, 700}
You can use multiple lines to set multiple window bounds at the same time.
Once you're happy with your layout, Script Editor can save the script as an application (File → Export and choose File Format: Application). This can then be added to your Dock for easy access.
If the application you're trying to manipulate is not scriptable, such as Sublime Text, you can use System Events to tell the application. This will require you to enable Accessibility control in System Preferences → Security & Privacy → Privacy → Accessibility.
To get the bounds of a window of a non-scriptable application, you can use:
tell application "System Events" to tell application process "Sublime Text" to ¬
get {size, position} of window 1
This will return the size and position of the window, such as:
{{500, 500}, {200, 200}}
To set the bounds of a non-scriptable application, using the result of the previous code:
tell application "System Events" to tell application process "Sublime Text" to ¬
tell window 1 to set {size, position} to {{500, 500}, {200, 200}}
If the application whose windows you are trying to manipulate are not open prior to running this script, use the following:
tell application "Terminal" to activate
This can be combined with setting the bounds using:
tell application "Terminal"
activate
tell window 1 to set bounds to {200, 200, 700, 700}
end tell
No delay is necessary since AppleScript will wait for the application to open.