Groups are an incredibly important feature within CiviCRM. They play a critical role in CiviMail and Profiles as well as their fundamental use as collections of contacts that have something in common. Whenever you hear about the concept "contact database segmentation", groups will be one of the most important tools that you'll use for it.
There are two kinds of Groups - Regular Groups and Smart Groups.
Regular Groups allow you to explicitly place contacts in a group independent of their characteristics, based on your personal decision. For example, you would need to manually assign your Board Members to a "Board of Directors" group. You can then use this group to easily send board-related emails to each person who is a member. You may also want to restrict permissions to view and/or edit the contacts in this group.
Smart Groups allow you to configure them in such a way that contacts are automatically assigned to them based on one or more characteristics and/or activities of those contacts. For example, you can create a Smart Group for "Recent Contributors from California" - which combines the "activity" of making a contribution during the current year and the "characteristic" of having an address in California. When new contacts located in California make a contribution, they are automatically added to this group.
As mentioned earlier, groups in CiviCRM can perform many different functions. Not every group needs to be used for every function though. Every group has specific set of settings which describe what it can be used for and what it can't:

There are two general uses for groups:
Visibility indicates who will be able to view this group. Select 'User and User Admin Only' if membership in this group is controlled by authorised CiviCRM users only (people/staff who are allowed to log into the database). If you want to allow contacts to join and remove themselves from this group via your website using profiles (more on this below) you should always select 'Public User Pages.' If you also want to allow the group to be searched via a Profile used as a directory, select 'Public User Pages and Listings'.
Some organisations find it useful to create a hierarchy of groups. In CiviCRM, this is done by creating a "Parent" group and then assigning other "sub-groups" under them. When a user sends a mailing to a "Parent", or searches for contacts in a "Parent" group - all contacts in the associated child groups are automatically included.
EXAMPLE: An organisation that has a National office and 5 regional offices wants all 5 regional offices to be associated with the National Office. To accomplish this, they create a "National" group and then assign it as the "Parent" for all regional groups. The National office can now send mailings (for example) to the "National" group - knowing that all members of the regional groups will be included.
Individual contacts can be added to a Group either in the Contact edit screen or via the Groups Tab. Multiple contacts can be added to a group at once by conducting a search, and then selecting Add Contacts to a Group using the More Actions menu. The second way allows you to add multiple contacts to a group by going to Manage Groups, selecting Members for the relevant Group and then using the Add Members to this Group option at the top of the screen.
Contacts can also be added to a Group as a result of filling out a Profile (see below).

Since Smart Groups are essentially saved searches, they are a powerful tool to standardise your organisational processes. For example, you can create a Smart Group of all donors who have not yet been sent a thank-you letter. As you send your letters, the donors receiving them will automatically leave the smart group, allowing you to always have an accurate list to work from.
Whilst the principle of a Smart Group is that it is a 'saved search', specific individuals can be added or removed from them. For example, if someone unsubscribes from a mailing that is based on a Smart Group, they will be recorded as "Removed from the group" even if they still meet that smart group's search criteria. Similarly, you can manually add a specific individual to a Smart Group. For example, someone who has left a town but still wants to receive the newsletter that goes out to the Smart Group of everyone in the town, can be manually added to the smart group.
You can search for group members based on their status (e.g. Added or Removed) by going to Manage Groups >> Group X >> Members >> Find Members within this Group, and then select one or several of the Added, Removed, or Pending status checkboxes.
When you need to modify the criteria of an existing smart group follow these steps:
Groups are the foundation of CiviMail. CiviMail uses groups (regular or smart) to determine the recipients of a mailing. You can include groups in your CiviMail mailing as well as exclude them. There is also a function to send emails to a selection of individuals without adding them to a Group first, which you may want to do if you have a one-time need to communicate to a large set of contacts. This function (Search >> More Actions >> Schedule/Send a mass mailing) however, still requires a Base Group for the mailing to go to. For this reason, and because it is useful to have a small test group that all CiviMails are sent to, we recommend setting up a 'test mail' group, and then using this as your Base Group.
If you want to allow contacts to add themselves directly to a group, CiviMail provides an easy way for them to do that by providing a preset URL that can be used. You can include this URL in an email that you send to a group of contacts if they click on it they will go to a page that displays any Groups that have the following characteristics
The URL for subscribing to Newsletters is: http://www.myorganisation.org/civicrm/mailing/subscribe?reset=1
You can also have a page that lists just a single Group for signing up to by adding gid=XX where XX is the ID of the Group to the URL, e.g. if the Group ID is 1, the URL would be: http://www.myorganization.org/civicrm/mailing/subscribe?reset=1&gid=1
A confirmation request will be sent via email to the subscriber for each selected email list asking them to activate their subscription to each list by responding to the corresponding confirmation email.
TIP: For Drupal users, be sure to grant the "access CiviMail subscribe/unsubscribe pages" for anonymous users if using this feature.
When using Advanced Search, if you select several Groups in the Group box near the top, it will treat the search as an OR search, and return results for contacts who are in any of the Groups you select. If you want to find people who are in ALL of the groups, you will need to use "Search Builder".
There is also a very useful built in Custom Search that enables you to find contacts who are in one Group but not in another (CiviCRM >> Find Contacts >>Custom Searches).
TIP: An alternative route to finding all the contacts who are not in a particular Group e.g. Group A, is to create a Group B that contains all contacts, then find Group A via Advanced Search and use More Actions to remove them from Group B, which gives you the grouping you were wanting.
For this section, you have to have a basic grasp of what CiviCRM Profiles are and how they work.
Groups play two special roles in relation to Profiles. Both of them are to be found in a Profile's Advanced Settings.
Access Control Lists (ACL) provide finer grained permissioning than what is available through Drupal's Permissions and Roles. Setting up ACLs requires a good understanding of the concept, which is thoroughly explained in the online CiviCRM Documentation here: http://wiki.civicrm.org/confluence/display/CRMDOC/Access+Control
As with many processes, the key is to make sure you have assembled all the parts before you try to join them together. In this case you must set up the required Groups, Custom Data Groups, Profiles and Roles before you can use them in ACL.
Drupal users of CiviCRM have additional options when it comes to using Groups. The Organic Groups CiviCRM module http://drupal.org/project/og_civicrm integrates organic groups, like google groups for example, with CiviCRM groups. This is useful for groups that form organically on your website but need to be tracked within your organization. Once the group of web users are in CiviCRM they can be used for mailings, tracking address information, tracking activities or anything else you might do with your CiviCRM contacts.
Once the Organic Groups CiviCRM module is enabled via Drupal Administer >> Site Building >> Modules - it automatically creates two CiviCRM groups for each existing Drupal Organic Group:
There has been error in communication with booki server. Not sure right now where is the problem.
You should refresh this page.