I've been developing software for 40 years and here's my unsolicited observations:

- Projects always take longer than anyone expects, even when accounting for projects taking longer than anyone expects (Hofstadter's Law)

- The project architecture will reflect the organizational structure of the entity creating the software (Conway's Law)

- The above two points are often presented as jokes but they are not, they're both actually true

- You cannot force two people who do not like one another to pair program

- Pair programming should never be forced on developers, let developers decide when to pair and whom to pair with - this is the autonomy developers seek

- Code reviews are a waste of time and present a great opportunity to destroy team morale

- Software development attracts a lot of assholes and prima donnas who all believe they are the fabled 10x developer

- It is just as important to understand the why of a feature as it is to understand the what - developers need to understand why a feature is relevant and what problem it's solving for users to be able to best implement it

- Invest in automated unit testing, application build, packaging, configuration and deployment. This is your best defense against Hofstadter's Law.

- Some teams have a knack for failure regardless of the software development methodology being utilized. The same is true for application frameworks and development languages.

- Some teams have a knack for success regardless of the software development methodology being utilized. They can also use the "bad" application frameworks and development languages and still be successful.

- Mutual respect and everyone pulling their weight are the best predictors of a team's success

- Just because someone isn't working out well on one team doesn't mean they won't excel on another team. Some people will excel regardless of the team they're placed on. There are also a few, very few, who can't seem to excel anywhere.

- Some people aren't cut out for development and since 1960 we've been trying to figure out who those people are and dissuade them from entering the profession - all to no avail. This is a sink or swim profession and it's tragic to watch people sink - especially when you can't put into words why they're sinking and how to start swimming.

- Outsiders believe developers are anti-social and don't realize modern development is a team sport. The best predictor of success is how well you were able to play team sports. If you always had lots of problems with your team mates then you'll probably have lots of problems with the members of your development team. Of course this isn't 100% accurate, but it's a good predictor. Those playing well in team sports, play in bands, or have been involved in dramatic productions tend to work well. Basically any activity having a group of people work together towards a common goal. Loners do not work well on development teams - they find success on skunk work projects.

- Finally, management is key. If you fundamentally disagree with your management then it's time to move on. There's no need to trash the management when you leave, all you need to say is you don't feel you're aligned with their goals and priorities. Some people may like the management, others may not. Don't take it personally.