We all have bosses. We also have customers who pay us for running their software projects. They are my bosses for the time of the contract. I'm also acting as a boss for developers who are working for teamed.io. It is obvious that a good employee/contractor is one who makes his boss/customer happy. But only a bad employee works toward this goal. Trying to make your boss happy is a false target that, if pursued, ruins the project. A professional employee works for the project, not for the boss.
We all work on projects as developers, designers, programmers, managers, testers, you name it. The boss is also a member of the project. More formally, he or she is a stakeholder, same as every one of us. Each stakeholder has his own needs for the project: 1) Jeff, the developer, wants to learn Scala and collect his paychecks every two weeks; 2) Sally, the product owner, wants to attend an expo in Paris and also collect her paychecks; 3) Bob, the CTO, wants to raise round A funding and collect a big paycheck; etc.
The project has its own objectives, to achieve 1 million downloads in less than six months and under $300,000, for example. This is what the project works for. This is what all of us are here for.
Our personal needs may be fully satisfied while we're all working toward this goal, or some of them may be sacrificed. I mean all of us, including the boss, whoever he or she is, either a CTO, a co-founder, a project manager, or a team lead.
The project is the source of our checks. Not the CFO.
The CFO is a stakeholder, like everyone else. The project gives him more power than others because it's necessary for the whole mechanism to work properly. Every project member has his or her own roles and responsibilities. I write code; the CFO writes checks. I eat at McDonald's; he drives a Jaguar. We have different needs, and we both agreed that the project would satisfy them. Otherwise we wouldn't be here, right?
We're all parts of a mechanism called a "project," which works according to the rules and principles of project management whether we are aware of them or not. Whether we have a project manager or not. Even if we violate all of them and manage ourselves in total chaos, we still have a scope, cost, schedule, and all other attributes of project management.
A professional and savvy boss understands that his role in the mechanism is to clearly define project objectives and make sure everybody's needs are aligned with those objectives. In a properly managed and organized project, everybody sees and feels how his or her personal needs are satisfied when the project achieves its objectives: Jeff learns Scala, Sally sees Paris, and Bob buys a new house.
However, if Jeff wants to learn Scala and we're developing an iOS application, that is a problem for the boss to resolve. Either convince Jeff to fall in love with Swift (I doubt that's possible) or replace him with someone who is already in love with it. It's clear that a professional boss will resort to such a tragic act as firing Jeff not because of his personal feelings towards Jeff but because they are both working toward the project objectives. Jeff and the boss will both understand that Jeff's need to learn Scala is not aligned with the objective of the project.
It is the CTO's responsibility to do something about Jeff when his personal needs become misaligned with the objectives of the project that is paying his salary. A professional CEO understands that and always acts in the best interest of the project, not of himself or anyone else personally.
I believe a professional team player does two things: obeys and resists.
First, you have to understand that the boss is here in order to help you organize your time, your tasks, your communications, your plans, etc. He knows more about the project and uses that information to help you do your job. Your real boss is the project; the boss you interact with is just a hired manager who translates project objectives into plans, instructions, schedules, etc.
This boss is your colleague who does management while you're writing code. You're both equal. You and he are in the same boat. Your functions are different than his; that's all. You're not working for him but with him on a project. A true professional team player feels himself equal to all other members of the project, no matter how high they are in the hierarchy.
At the same time, he strictly follows the process and obeys all project rules and instructions, not because he is afraid of being fired but because he wants the project to succeed.
Second, being a professional team player requires a constant readiness to resist each and every instruction if you feel it contradicts the project objectives. A true professional doesn't work for a boss. He doesn't want to make the boss happy. He actually doesn't care whether the boss is happy or not. He knows that the real boss is the project and tries to make the project successful and ... happy.
A true professional always works for himself. Jeff wants to learn Scala and earn a certain amount of cash. He joined the project in order to satisfy these needs. If the project fails, Jeff won't get the money and won't fully learn Scala. So if the boss tells Jeff to do something that may jeopardize the project's success, will Jeff do it? Does he care about disappointing the boss? Absolutely not. All he cares about is the project's success, which translates to his personal success.
Thus, making your boss happy is a goal for the immature, fearsome, lazy, and weak. Making your project successful is an objective for professional, strong, mature, and brave team players.