Windows are a great user interface convention. They allow you to have multiple tasks on the go at once. You can even put different windows on different displays, such as e-mail or IRC on one monitor, so you can see when someone needs to talk to you, while still being able to focus on your work on a different display.
You will want to make the maximum use out of the space available, so you will resize your windows to be the size you need.
Such layouts are convenient, as you can spatially assign contexts, such that movement in the left of your vision means you have a new e-mail.
This is an improvement over having all your windows laid on top of each other and a way of recieving notifications that you need to look at a window, since there is less of a context switch between looking at an already open window and deciding it isn't important, and switching windows, re-adjusting your view and searching for whatever the message is about, then deciding it's not important.
However, it is possible to become dependent on this behaviour, so you'll avoid any actions that may mess up your optimally crafted layout, such as rebooting or detaching your second display from your laptop so you can take it to a meeting.
There are a few ways of trying to maintain this window placement:
Use a desktop environmnent that preserves the locations of all your windows between all the different contexts that can cause your windows to be re-arranged and hope that it leaves you something useable in-between.
The desktop environmnent of Apple Macs and Xfce attempt this with varying amounts of success.
Use a tool to place your windows for you according to your programmed preferences.
Tools such as the venerable Devilspie and Devilspie2 allow you to programmatically define where you want windows to appear.
Use a desktop environment that helps you put windows in specific places.
This is about making it quicker to lay-out your windows like you want them, rather than keeping them in the place you put them, but it works fairly well.
The desktop environment provided by Windows 7 lets you drag windows to pre-defined parts of the screen, such as the left edge, and have it re-size the window to take up the left half of the screen on that display.
Use a tiling window manager, so the default behaviour is making the optimal use of your available screen real-estate.
When you open a window in a tiling window manager, it maximises itself. Opening an extra window will resize the original and move it next to the new window, with both having an equal proportion of the available display.
This is my preferred option, since it's more flexible than option 3, where you have to exert effort to make your windows tile, and I find it more reliable than option 1.
It doesn't hurt that some tiling window managers also allow you to configure them to place windows where you prefer, like you were using option 2.
The regular editors of Yakking all use tiling window managers. I use AwesomeWM, other editors use XMonad. There are others, such as dwm, Ion and the Shellshape extension to GNOME Shell.
AwesomeWM and XMonad are functionally similar, both offering a highly configurable solution by being fully programmable.
AwesomeWM is configured in Lua, and XMonad is configured in Haskell. My primary reason for using AwesomeWM is I do not understand Haskell.
Using an alternative window manager has its pitfalls, such as poor integration with existing desktop environments. For this reason I maintain instructions on how to make them integrate more nicely on my own blog, mostly for my own benefit when I have to re-install a system.
An alternative approach is to integrate tiling into an existing window manager, which is what the Shellshape GNOME Shell extension does.
This has the benefit of being more likely to continue to work as the desktop environment changes.