When building a team, as I am now, I think it's very important to manage the culture of the team so that it can be as productive as possible. Over the years, having experienced different types of teams in various cultures I have mentally put together a list of attitudes and ideas that I think are beneficial to a development team. I figured I'd share them here. I'm going to call it my development creedo.
I <your name> am a developer.
I understand that the reason I exist is to serve the needs of the users. I will take user requirements seriously and be passionate about customer service. I will not show disdain for the customer who does not understand what I do and will always attempt to cross the bridge from the technical world to the user's world to better understand them. By gaining the user's understanding I can build the user's trust, and with trust I can gain a valued partner in the development process.
I understand that every member of the IT staff is important to achieving my goals. Database administrators protect my data and help ensure it is performant. Network administrators make sure my backups are secure and that I have the access, software, and working systems I need to perform my job. I will not form a silo of developers and resist having an "us vs them" mentality. I will support the non development members of my team as I would any other peer or customer.
I understand that every developer on my team is my peer. As a peer, they will have my respect and I will have their respect. With a trusting and respecting relationship, I will not fear to ask questions, raise concerns, or otherwise assist my peers in creating high quality code. I see intellectual conflict as a healthy and natural function of teams to arrive at the best course of action for a task. When conflict has concluded and a direction has been decided by the team, I will wholeheartedly support the approach taken even if my suggestion was not the "winner".
I understand that ego in all its forms is destructive and harmful to the team. I will remember that the team owns the code, not the individual. While I should feel pride in my individual accomplishments, I will always remember to credit the support of my team for my achievements, and I will never jealously guard my code and techniques from my peers. I will encourage my peers to review and understand my code and welcome their constructive criticisms. I realize that all code can be improved and will take constructive criticism as a chance for intellectual debate and a learning experience instead of as a personal slight.
I understand that my field is constantly growing and changing. I will create opportunities to explore new concepts and be open to new ideas. I will not latch on to particular patterns or development practices that I am comfortable with and use them in inappropriate situations. When I use particular patterns and practices I will carefully weigh the benefits and drawbacks of the patterns and make decisions that are the best for the team. While I enjoy learning new things, I will resist using tools and development practices just because they are new or cool, but only when they add real value to the code.
I understand that even though I am the first to write this code, I will not be the last to maintain it. I will strive to keep my code readable, well documented, and have as little complexity as possible. I will not assume that since I am aware of a particular tool or development pattern that other developers are. I will carefully document the usages and justifications for using a pattern or tool so that those who come behind me can understand better what I was trying to accomplish. I will never make my code difficult or obscure in an attempt to build "job security" or prove how smart I am.