Personally I cheat for subnetting
Most people use the A class of the C class for sub-nets. I have not yet designed a network that needs an A class set of numbers. I also like to give the clients in each subnet plenty of room to expand, while still allowing them to have a reasonable subnet hierachy in place. Thus I tend to use the B class address numbers.
Take 172.16.x.x as the business network, it has a number of different locations or work groups, so I can use the 3rd octet to designate locations / work groups and then use the 4th octet for 254 pcs within that group. Thus all HQ units will be between 172.16.0.x and 172.16.9.x, gateway and system admin is 172.16.0.x, business admin is 172.16.1.x, sales 172.16.2.x etc - second facility is 172.16.10.x to 172.16.19.x, gateway and system admin is 172.16.10.x, business admin is 172.16.11.x etc.
Yes that means a lot of address go unused. But I once spent a nice two months reassigning sub-net addresses and adjusting routers and dns servers because the initial network only needed 20 clients in its largest sub-net with a total of 160 all up. It took 3 years for the business growth to trash the C class subnet that had been originally set up. Much of the time was spent travelling between facilities reprogramming the routers, dhcp servers and dns servers. Spent some time redseigning the system, then reprogrammed everything using both, got the new stuff running and went back around removing the old - all to ensure no problems with the day to day operation during the change over.
If you need more than this you can apply the same to the 10.x.x.x private address group. Much better to over allow for expansion than be too restrictive. And by using simple to remember digital octet groups you can readily tell what group and lcoation a particular IP address belongs to.
By applying the subnet at the last octet I can simplify the router instructions and make the subnet division easier to remember.