After years of developing, team leader and project management experience I realized that all good decisions, even the technical ones must include all the people. Well, “everybody” knows this, every project manager, team leader, manager,etc. Really?
Lets focus on the team developers.
The typical decision will be something like this:
1) I have developers and a senior developer team leader
2) They all know Java
4) They all know about java and that is the language of the android, and know what is an Android phone, it will be a challenge!
Lets remake the decision looking from outside:
1) You have developers and at least one of them it’s a Senior.
2) They all know Java.
– The problem starts here. What they know about Java? The language and some algorithms (even with some years of experience), or they understand how to apply Java in the context of mobile Applications? If this is the first time they will develop mobile applications, they don’t understand the architecture of these applications, how to develop the components, the events, actions, how the hardware responds and send events to the application. The thing here its not the details of the mobile android development, it’s the lack of “mind set” the team will need before start to code, and the result will be most certain a bad quality product, who will need a lot of fixes and rebuilding. (been there)
4) It will be a challenge!
– No, it will be a disaster for the company and/or for the customers! The lack of know how in the middle of the project will arise and show all the architecture problems not prevented in the analysis phase or by the Senior. And here you will have 2 options: Remake the whole product from the start, which sometimes its not a bad idea (only for project managers), because the team already acquired the know how and know how to develop in a better way and know what to develop. Or fix the architecture, and this for me it’s the real challenge and here I thing “It will be a challenge” makes all sense! Its like trying to fix an already built house into other blueprint, good luck! (you will see its better to destroy and build again)
What’s my point, here?
This was just a simple example, to show that the most common way of thinking can lead to big problems, which by the way are always happening.
Before a great decision to be made in the software industry, first take in consideration the people you will choose. They are people with a specific know how and mind set, and to change that it takes time and it is a process you must consider. You can say, you will put them all in training classes. Great, but don’t expect that some dozen hours will create a miracle and prepare them for big projects. Training just gives you an overview sometimes shallow, other times deep, but after the training the people must play for some time before entering the “competition”. You can see this in sports teams. They are professionals, they play for many years, but when something changes, like others players, tactics (projects), coacher (team leader) they need to practice before the real competition to be successful, or you will ear from supporters “they had no time to practice that’s why they are playing so bad”. Probably you say the same about your sports team. Remember those words in your company and your team.
Once someone said, that 80% of the quality of a product comes from management, not the workers, because they need conditions to develop a quality product or project. These conditions include human resources management, understanding human behavior and acting accordingly!
What to do?
I will not give you a magical solution, from years of experience as a developer, trainer, team leader, architect and project manager, I can help you to take a decision involving all these variables, but as a manager, project manger or whatever manager you must open space for your developers talk about the difficulties and frustrations they have, and not throwing a “it’s a challenge for you guys” like a magic sentence that in the future will bring its fruits (demotivation and consequently quitting), and I will not talk here how much it costs to bring a new member to a team (think about a new player in a team, even expensive he need time paid by the sports team to adjust to the new environment).
If you are a developer, be more open to your managers, and ask them time to practice, to develop small “challenges” besides the training and before starting a big project, it will give you know how, confidence and experience for a bigger project. Your company its not wasting money its an investment. I think it will cost more to rebuild or fix a bad product than to spend time before doing some “virtual work” and then do the real work. A soccer team plays 1-2 times a week, and receive money from the public, but during the week they spend money training.
When you are working with people, one thing you must expect and be sure about: “You are working in a complex system, not in a complicated one” (See a previous post to know the difference).
When you work in a complex system, there are some unpredicted behaviors, as everybody who works with people already know. So, you can’t control the people, you can try a lot of strategies to do it, like: persuasion, influence, fear, bonus, promotions, etc. Some of these strategies are good ones, but others are malicious and just show how bad a manager is as a manager and as a person.
But whatever your strategy is (hope you choose the good ones for everybody), more or later you will have “surprises” because you thought you could control a complex system.
So, how can I manage a team if it’s not manageable by nature and have some unpredicted behavior?
You can minimize the unpredictability managing the system, creating the rules, not rules for the people but for the system. If you are a project manager, or a team leader, you must give freedom to the team members, but show them the constraints that you think will influence the behavior of the system, or in this case, the team performance, motivation, etc. The team, as a complex system with people, will experience a wonderful thing, a complex system growing and self-organizing with itself. I have already experienced this in some projects where the project manager was out or gave this managing opportunity.
This seems to be a simplistic view of software teams’ management, but if you stop and think for a while I am sure you reach this conclusion, or similar, because when you are managing people you are managing the unpredictability which seems to me a paradox, and it is! So, this is why you must let the system go, inside your parameters.
Want an example of this? Traffic.
No one is controlling the people inside the car, and sometimes they really have an unpredictable behavior, but, for the good of everybody in this system (with some flaws but fortunately just a few), the system self organizes. There are anyone controlling the drivers? No! There are unpredictable behaviors? Yes, they are people! The system works? Yes, I use it all the time! This works for software developing teams to, really! Do you have the courage to try it out?
Usually these are words used as synonymous, when in fact they are orthogonal between them.
When we are talking about “complicated”, we are explaining something about linearity. Something is “simple” or “complicated”. What does this mean? Let’s see an example:
Something “simple”: understanding how a bicycle works. I think we don’t need to a genius for this, you analyze the “simple” engine and after some minutes (hopefully seconds) you’ve figured it out!
Something “complicated”: How a clockwork works. If you try to analyze it, you will have to think and analyze the mechanics for a long time, write a lot, until you figure out how the watch works, and how all those components fit together to give you an “accurate” time. It’s a task that’s its possible, takes some time, but you can analyze it linearly until you find the solution that explains it 100%.
Click image below to follow to a site explaining how this works!
The image should be perceived has trying to show a complex system, but its not, it’s just very complicated, but with a 100% detailed explanation how the engine works!
So, we have Simple and Complicate, as 2 grades of linearity.
How about “Complex”?
When we say “Complex”, we are talking about behavior, not linearity. We can take several degrees of behavior but let’s analyze 3 very understandable:
“Predictable”: Something that we can predict, we could not understand it totally, but we know how it responds: For Instance: I jump, and gravity pushes me down again. Do I understand gravity? Something in school…. but…. its invisible and pushes me down! 😉
Complex: Something that we can somehow predict but sometimes arises some unexpected behavior. For instance: Social interactions in a small company, home, software projects with several components in different tiers. Or Poker, a game with rules, but not predictable.
Chaotic: Like complex systems, but with plenty unexpected behavior factors. For instance: Events in a big city. weather sometimes is complex and sometimes chaotic.
So, I hope in the future when someone use the word complex knows that’s its different from complicated. Saying complicated means I just need tools and time to figure it out, and complex I could have tools and time and take my whole life and not discover or even completely predict the system.
Hopefully in future posts dive deeper on this subject. It’s a very popular one in software team leading.