Leverage is a term that I, as a college football coach, use a lot. It basically means that when you are blocking or tackling somebody that the ‘low man will win’. The physics of that are pretty simple. The player who is lower gets to use his legs and the player that is higher only gets to use his arms. Legs are stronger than arms so the ‘low man wins.’ But this leverage can only come into play effectively if the player has approached the opponent with the correct force and angle. If you approach an opponent standing straight up you will have two problems: 1) You will be flat footed, so you will have no force 2) You will not be able to get low enough in time before the contact, so you have a bad angle. Usually being too high or not having enough force comes all the way back to the player’s stance and his first two steps out of that stance. The stance must allow the player to fire out low and hard with a flat back so that the force and angle can be effective. So if the stance, the first few steps and the contact point on the defender are all correct, then you will have a chance to succeed in your block or tackle because you have ‘leverage’.
This concept of leverage applies to all team members on a project, but I want to talk about developers. When the project starts with the client we are at the point of needing to have done all of the proper steps up front so that a successful software solution can be built. We are at the point of actually making the ‘block or tackle’ so we need to have done a great job preparing for this moment.
What type of stance and first steps, just like the football player, are needed as a developer to be in a position to succeed?
The base is being educated about the tools that can build the software solution. Some of this education usually needs to be in a formal setting like a classroom to understand the basic structures of software development. To me this is the ‘stance’ of the developer. Without a proper stance it is very difficult for the developer to move forward in learning. With this proper foundation in place the developer must be a self-motivated learner to master the software tools of his/her business. This comes first with a personal curiosity to learn and an understanding that this up-front learning will pay off down the road when a proper solution must be designed. The company must also do a great job of encouraging this learning by providing opportunities for such growth. This can be done by…
a) Allowing developer groups to get together to discuss software topics and current proposals that are being designed.
b) Encouraging certification in areas of software that will be used often. The certification costs of a test are very minimal compared to the breadth of knowledge gained about the software topics they cover. Sundog does a great job of encouraging this in many ways. The knowledge that I have collected in earning my Advanced Developer, Sales Cloud and Service Cloud certifications has given me so many more tools in my toolbox to help design software solutions.
c) Having code reviews at appropriate times, especially for new code. Code reviews are a great place to spark discussion, for new developers to learn the ropes from experienced team members, and for experienced team members to be surprised by new ways of looking at problems from newer team members.
d) Doing paired programming, especially for new code. Paired programming may seem like a waste as you could have two developers working on different pieces of code. But the code developed during paired programming will be better and more maintainable in the long term because there will be two eyes on it. Both people in that paired environment will want to contribute and be focused on developing the best solution. Another great benefit that I have found is watching how another developer uses certain tools or keyboard shortcuts to solve a problem. These best-practices can then filter more quickly across the team by having these paired programming sessions.
Once the project has begun and the developer has been trained properly with the correct skill set for the project the chances for success and a happy client are much higher. At this point the developer must be able to adjust to the inevitable changing requirements of the project. This is the same problem that a blocker has in football. Once contact has been made the defender may try to spin, twist or simply attack and the blocker must react properly to those changes. These points in a software development process bring out the most important trait for a developer which is problem solving. There are problems to be solved and road-blocks to be removed or detoured around every day in programming. Having the curiosity and persistence to make the necessary adjustments while problem-solving is a trait required for many jobs, but it is extremely important for developers.
Well, it is time for me to get back into the huddle and see what play is being called for today. I want to believe that when the play is called, that I have prepared myself to be successful.