We are all Steve Jobs
Throughout the years I’ve noticed a few problems with the teams I’ve been working, 1. they have all been doing some sort of agile, 2. In all honesty, we sucked at creating a software product, by sucking I don’t mean we did not deliver (some sort of) a product, but rather, the process was so convoluted so full of misunderstandings that the default work mode is discussion and frustration, which for developers takes away from valuable time to focus.
I’ve been taking a deep look inside, because as of late, I don’t feel happy with work, some of the problems I’m experiencing are superficial, spending a lot of time polishing the UI, cleaning somebody else’s code, to those I know the answer to, they are trivial, but there is a bigger problem here, somewhere along the way I lost the most important part to do what I do, I feel I spend my time arguing with teams about communication, about specifications, about working together, about building the right thing, constantly trying to keep a boat on course to some foggy destination… The world has been eaten by software, you either understand computers or you are nothing, and you either work with computers or you future is certainly doomed, everyone is trying to build the next facebook, we are all steve jobs, the rat race is alive and well, the only difference is that it is now done with computers, and there is just such a deep misunderstanding… we try to patch the hole, elevate everyone as if everyone can create the next apple computer! We need to understand the client problem, we produce tickets! and we are doing scrum, we can track the progress! look at our ticket board! and we have designs! oh, and by the way it needs to be done for yesterday.
Now, let’s take Steve Jobs, to be honest I don’t glorify Steve, he clearly had many flaws and I don’t think I would have liked working with him, but do think he was a man of vision, and there are quite few men of vision who are quite successful (The Zuck, Bezos, etc..), the problem I’ve noticed over time is that for 98% the teams out there don’t have vision, dare to say even passion, we are a bunch of random people who may not have even worked on the problem area, and we are creating a product for people we have no relation with, and we expect to know what to do? if you have no clue of the solution how can you write it down? you are in a reactive mode, problem pops up, you smack it with a hammer, how can I estimate that? Over the years I’ve been trying to teach people how to write a proper ticket so I can do some sort of estimation, but it just doesn’t stick, because people don’t think in tickets, if your vision of a solution was clear than maybe you can put some sort of formal definition, but people with no vision think in even more abstract and foggy terms, do you think if I had a third of Steve Jobs’s vision and creativity I would be sitting here on the 3 Start-Up of my career? BUT MOST OF US ARE NOT CREATIVE, creativity is hard and the median score for creativity is 0.
Consider for a second your typical start up, it comes into the world with the promise of solving a particular problem, “We are the X of Y”, it needs to be laser focused on solving a single problem, you just don’t have the resources to tackle more, yet sitdowns to do ideation are as common as bread, clearly what you have is an intent and nothing more, look at the biggest companies out there and there are two clear patterns, companies with a clear vision, usually given by a single individual: Facebook and the Zuck, Bezos and Amazon, Jobs and Apple, the heads of these companies provide their teams with a clear vision for the problems they are solving followed by a stellar execution, if you had this, you don’t need brainstorming sessions, the people in charge of the vision will fire ideas all the time, and the team will quickly scramble to make them happen. Now look at the other side of the spectrum, companies without a clear vision but tremendously resourceful, the biggest one I can think of is Google, Google has no overriding directive, it might have started with single stellar product, but it quickly branched out, they are out to produce things with computers nobody has produced before, in this kind of organization no single person is responsible to setting a vision, because the problem space is clearly too large and too complex, here teams are empowered to research and create technically superb solutions, their requirement: a lot of resources, time and freedom for smart people to achieve the un-achievable, if your typical start-up has none of the above, it clearly is in a disadvantegous position.
One can quickly start to see the problem, on your average start up team everyone gets frustrated, devs are not happy with management because the impossible is asked, management is not happy because they don’t get to see in to the future and actually manage… something. With some of teams I’ve worked with, this has come close to working, if there is truly a strong technical person on a management that can communicate (or produce) a vision, he/she can understand the problems and sometimes even provide solutions, some real world examples that have happened to me: “don’t over optimize, we will pay for more servers”, “I see your problem, I’ll convince the client it is too much of a time effort”, but before reaching to that conclusion there was a conversation with a strong technical component, the manager can understand complexity and drawbacks and still keep the overriding vision in mind, manage expectation and communicate to other non-technicals, good management people know what they don’t know and let the teams do their job, but like I said, this has only worked with strong technical or at least experienced management, for young teams in spite of Agile-flavored methodology the problems remain constant.
So… what is the solution, I have mention some strong points above; technically experienced management, C-levels with vision and willpower, large amount of freedom for technically complex problems, but that still leaves young teams in a rust, and that is the complicated part, I do have some theories that might alliviate the pain though:
- Play to your strengths, if you are doing a bad job in a certain area, get out of the way, this takes a lot of courage, but just think about it! you are counter productive, what you need to do immediately is maximizing your value for the team, some examples: if you are supposed to create tickets, but the team keeps complaining none of the tickets are complete, STOP IT, write more high level definitions of the problems and let the team write the specifications! do what you are capable of doing at 120% and sort the rest in another way, of course the world is not perfect and people need to protect their jobs, yet would like to believe that people are not dumb and realize that the more value they bring to the team the more secure they are in their job. Another example, if you are a designer on a small team and you are designing a new product, don’t waste your time doing micro-animations, focus on the big picture, get the major workflows done, help the team move fast, the time will come when you can polish all the small things, you can have a beatifully animated application, but if the big chunks of UX are not there, nobody will use it.
- If nobody knows where to go, putting a board with tickets will not tell you where to go, you need to adapt a more abstract way of working, if you will continue being reactive, then adopt a way of working that embraces reactivity, trying to put deadlines on tasks when the tasks are poorly defined only creates stress, embrace the uncertainty, set high level objectives and fuzzy deadlines, everything else will be constant failure, because you are so reactive to the outside world that your assumptions and knowledge is in constant fluctuation.
- Create a functional hierarchy, put the people with at least a slight idea of where to go and how to get there on the top, a flat team of field experts is good, a flat team of lost people are only going to be more lost, everyone but especially young start-ups reject the idea of a typical corporate ladder, but I think they confuse the idea and blame the hierarchy instead of the non-functional parts, they throw the baby with the bath water, hierarchies are not inherently evil, they can be very very useful, wrong incentives and wrong people with power create non-functional environments, on your start-up no clear direction and no strong voices also create non-functional environments. One good example of this is the distance between people in charge and actual code, creates more bugs.
- Tickets are not agile, boards are not agile, agility is a way of thinking, a way of looking at the problems (and at life), I’ve come to the conclussion that Agility cannot be thaught, one must dedice to live an agile life and adopt an agile way of working, but I can give you a tiny example: imagine you are cooking and all of the sudden your kitchen is on fire, are you gonna finish cooking or are you going to take care of the fire, and afterwards are you going to beat yourself up because you didn’t finish cooking your meal? or will you be happy that your house has not burned down? if one is smart enough one can see which actions were the correct ones and move on, those who are too blind to see, is because they don’t want to see.
I could go on a on about my feelings and the ideas going through my head, but I’m sure of one thing, next time I get the chance to decide my fate, I’m not doing scrum or xp or the methodologies I now consider fads, I still hold the values of the Manifesto for Agile Software Development upmost, if at some point I see the need to have some sort of board with tickets I will go for it, but if I see I get a lot more value with just pure conversations and fuzzy deadlines, then so be it.