I've spent more time this week installing components I've worked on with a team who are using them in their project. This is a team of Java programmers who are moving across to .NET. It's been interesting to see how difficult they are finding it. Most of the problems are down to the way IIS/ASP.NET handle security on boxes that have been locked down, and the complexity of their configuration files (we spent 2 hours on a problem due to a typo in a type name in one of the configuration files).
On the security permissions, I think it's excellent that Microsoft ship their operating systems in a more locked down way, but if you don't educate developers about what is going on then what tends to happens is suddenly the Everyone user and other important users get permissions like 'Full Control' over the entire hard drives.
On the config files, I remember Alan Cooper mentioning how only an engineer could have designed a computer keyboard where potentially pressing one key could change/invalidate the actions of all others. It's like that with the config files - they are really powerful, but a single mistyped character can stop the whole system from working. It would be better if there was some way of viewing the information (e.g. WSE 2.0 has a nice Dev Studio plugin that presents a UI for the config file), validating it, or at least easily separating different classes of information (e.g. a mistake in my logging configuration is less critical than a mistake in the user account that ASP.NET runs under).
After accepting the need for greater education and improved design, I think that the attitude of developers plays a key role in dealing with these issues within a project. It's interesting how one person's feelings of frustration, negativity or anxiety can sweep through a team. For example, I was trying to solve a problem to do with security access and had someone sitting next to me saying 'this is crazy, this is way to difficult ...' which made it very hard to focus on solving the problem. When the issue was finally resolved there was more talk about how ‘stupid’ the system was than on making sure they understood why it occurred and how it could be fixed in future.
One particular danger in teams is 'magic' or 'superstitious' thinking - the bafflement when something that wasn't working is fixed. This can lead to a feeling of hopelessness within the team - 'It wasn't working, then we did lots of things and now it just started working again but I don't know why'.
Getting over the feeling of hopelessness is key. The starting point is to work from the assumption that nothing magical is likely to go on. When the feelings of anxiety start it's important to focus on letting these go and focus on through the problem rather than worrying about the position you're in ('damn, I need to get this working now'). It's important to work on a model for understanding the problem - describe how you think it should be working, look for areas where this might be wrong and propose hypotheses about what's going on. Also, avoid stating the obvious 'we're stuck and nothing we're doing is working'. Finally when things work again it can be worth backtracking to break them again in order to understand exactly what solved the problem (e.g. after overcoming the security problem we spent some time reproducing it just to make sure that our solution worked and our understanding of the problem is correct).
Unfortunately, working on development projects is harder than it should be. It requires a lot of knowledge and education to get things to work sometimes (which is why we can ask for the large salaries). Attitude plays a large role in how smoothly a project runs. It’s important to avoid feelings of panic and anxiety and hopelessness by focussing on understanding problems and learning more about how it is working. Then on the larger scale, campaign Microsoft to improve user education, event viewer messages, configuration tools and tools that make it easier to problem solve what’s going on at the lower levels.