TeamCity is responsible for:
Detecting source control changes
Compiling the solution
Running unit tests
Inspecting code, gathering build metrics, etc.
Packaging the application ready for deployment
Using our TeamCity plugin, notify Octopus that a new release is available
While Octopus is responsible for:
Distributing the packaged applications to the remote web/application servers, all in a secure way
Extracting and installing them
Modifying configuration files with environment-specific variables
Configure IIS, install and update Windows Services, etc.
Invoking any custom deployment actions on the remote machines
Gathering all the deployment logs into a central place