Pros
Work hours are totally flexible and it's possible for most developers to work from home. Unlimited hot beverages are available and there are good efforts in organising social events. Also, there is an enormous library of online training available and some on-site training also. The 'Citi collaborate' work social networking tool is also an excellent source of resources and a great way to network with people outside your department - and so it's easy to network with people working with similar technologies or with similar interests. There are many clubs/societies organised within Citi covering a wide spectrum of interests and sports. Citi donates 1 day of every employees time to take part in a volunteering activity within the community. Desks are big enough and chairs are suitable.
Cons
Everything is done with a minimum of resources. Teams are running complex applications without proper processes and methodologies. The business just doesn't seem to understand what is actually needed to make software. Teams don't have proper build or test processes, and many developers don't even have some of the most basic developer tools and hardware. Most of the developer machines are very low-spec, and can be painfully slow when dealing with some development work. Also, my department seems to have a gigantic budget shortfall, and they've dealt with this by forcefully relocating people to cheaper locations and by getting rid of many contractors (and not replacing them). Additionally, many developers have to work unsociable hours for weekend releases, and they are not paid for their troubles, and even getting the time off in lieu wasn't easy. Also, making requests for basic software, hardware and configurations is a painful and extremely slow process. I don't see any of these things improving any time soon. It's actually difficult to be productive at Citi, there are many obstacles, and not just because of strict banking regulations. Also, there is little cohesion within the department.