Love the Work
This isn't just a job. We should enjoy what we do. One of the great things about this line of work is the constant opportunity to learn and improve. With every project we take on, we can learn a little more about ourselves.
Treat People Like People
If successful, we will work with a wide variety of people, whether they are clients, coworkers, interns, or academic or industry colleagues. Because of this, we have to learn to see people for who they are and what they can do, and not just as labels like "customer" or "boss". We should treat clients and contractors like the people they are, whether that means having some understanding when things change on their end, or having the guts to argue when we disagree.
Honesty is the Best Policy
We might be pretty good at what we do, but sometimes a client will come along with a problem that involves deadlines or a workload that we can't support, technology that we're untrained in, or other requirements that we simply can't support. If so, we should shoot them straight, and do our best to refer them to someone who can be of better help.
Outcomes over Output
In any project, the contract will require agreeing on certain deliverables that will be provided to the client in exchange for payment. But that's not the best way to tackle the project. Let's make this about solving problems instead of packaging a product. From the initial stages of requirement gathering to the final delivery, we should always focus on successful outcomes rather than adequate output, so that when we do deliver that package, the client is really happy with what's inside.
Release Early and Often
Clients should be an integral part of the team, not just a customer tapping their foot in line while we deliver a packaged product from behind a mysterious counter. Actively engage the client for input throughout the planning, design, development and delivery processes.
A team member may make surprising contributions when they step out of their comfort zone, bringing fresh perspective to projects by integrating their own expertise into problem solving in new areas. Team members from diverse areas should be included in project planning and design. A backend programmer may have some thoughts on interface design. A user experience designer might think of a use case scenario that is problematic given a current database schema. A database expert might see where a programmer and a graphic designer aren't seeing eye to eye when it comes to making a form work for the kind of data that is being collected.
It's important to stay fresh in the field, which means attending conferences, developing and releasing open-source tools, and staying active both online and in the local community.
Encourage team members to develop skills beyond the expectations of their positions as they collaborate on projects. Bring in fresh talent by providing internship opportunities. If you can't pay them, then make sure that you tie their work into volunteer and open-source development activities that help them grow professionally and personally. But if they contribute to your growth and profit, then do the right thing and pay them well for it.
Freedom to Fail
Nobody likes to fail. But gracefully recovering from it can be a good opportunity to learn and improve. Encourage team members to take risks and explore innovative ideas. The benefit of early, frequent releases coupled with active client involvement is that even if an idea doesn't fly, we'll usually learn something useful from trying. And sometimes we end up coming up with something unexpectedly awesome!