Sunday, March 01, 2015

"Agile is fun, waterfall is not fun" ? Meh...

I've got this comment for one of my posts: "Agile is fun, Waterfall is not fun". This was such as terrific comment that I just had to respond with a post! It is terrific because: it is so wrong and so common at the same time!! It is marvelous!!!

Many people think that agile is fun, while waterfall has a reputation of previous century technology. All the cool kids are doing agile. Old timers are doing waterfall. Boooooring. 

What do you want to be? Don't answer, this is not a real question. The real question though: Is Agile really more fun than Waterfall? 
All things can be proved with fabricated example, so bare with me.  

You are looking for a job and have two options. "CoolGuys" company is developing messenger application for mobile. They have no customers, the idea is rather stupid in 2014, but they are working in Scrum. They have a certified Scrum master, stand-up daily meetings, estimation poker and all the Scrum stuff. Your second option is with "JustHereToWork" company. Most of the development team is over 35 (read old timers). Most of them are smart, apart from a few guys who are extremely smart. I mean Turing award or world-wide name smart. They have a great idea for a product, that is already becoming a major hit and they have the ability to make it happen. They also work in waterfall. Which company is more fun to work at? I would say the second. 

Let's say that the product is important and is a large part of a "fun" at work. What else?

Continuing with the example, you find a couple of friends that have worked at each of those companies and call them. Bill, the guy that worked at "CoolGuys", says that behind the "we are cool guys having fun" facade, the interpersonal relationships are very bad there. People don't help one to another and most of them don't really like one another. Even though the company organizes pizza evenings and game nights, the guys still hate one another guts and fighting over everything. Then you call the second friend, Joe, that worked in "JustHereToWork" company. The guy moved to another city and thus, had to leave the work place. For more than an hour he talked about the great guys at his previous company and how they have met at bar or on a weekend. They are still friends and even some folks has come to visit him in his new home. Hmmmmm. 

So, "fun" is more related to people than to development method. What else?

You call Bill once more, as you think that maybe the interpersonal problems were caused by Bill's personality. After all, you are such a great girl/guy, for sure you will get along with all the folks there. Bill explains to you that even though he had 10 years of experience working at ICQ/MSN messenger/Yahoo messenger and bunch of other programs, still his responsibility at the company was very limited. This is not only him, as all other guys had to go through loops to get any code into a product. This is even before the company have customers. Now, this is a bummer, as you like having a lot of stuff to work on. You call Joe to check the situation at "JustHereToWork" company. For sure, with all the smart guys there Joe was in charge of a single class method. Surprisingly, Joe tells you that he was a master of his domain. He has a lot of responsibilities there and was the final authority in a number of things. 

OK. Responsibility is another "fun" thing at work. Is there anything else?

When you go to sleep, you suddenly remember how Bill complained about being stuck at the same place and nowhere to advance. Apparently his boss didn't trust anyone and the company executives didn't think that that employees development is a good thing. Actually, they didn't think about it at all. Next day you call Joe and ask him about development path in his previous company. What a mistake that was... Joe talked for half an hour without stopping about different options, mentioned discussions with his manager and company policy. His final words were: "you only have to choose what you want to do!" 

This is not a fun thing to be stuck at one place, so lets add development plan to something that is fun at work. Anything else?

Is it fun to work on "yet another messenger"? Is it fun to work on a product that will be forgotten sooner than the company ships third version? Isn't it more fun to work on something that changes the world? If it changes the world for a better, this is even more fun! 

Impact is (yet) another item on my list of fun things. I don't know about you, but I want to change the world with my work. This is what I call fun. 

Is there anything else? Yep. Is development process part of the list? Nope.

Saturday, February 14, 2015

The race is over! The fastest development process is ... not Agile!

If I had a dollar for every time somebody says: "We have to deliver fast, lets go Agile", I would have about 20$ already. This does not sound like much, but this is the REAL number of times I have heard it. Moreover, nobody has ever said: "We have to deliver fast! Lets do good old waterfall !!!"

Well, are all those people wrong? YES! 
The results just came in. Agile process is not the fastest development process. Who come in first you ask? Waterfall.

How come? It is actually simple. Lets say that you have 100 boxes that you have to move to another place. You have a team of 10 completely identical people at your disposal. They are identical just to make the calculations easier, not because they are cloned or something like that. Every person can move one box in one minute.

How agile development, sorry, box moving looks like. 
  • Short sync and planning (1 minute): you take this box, you take this box and etc. 
  • Move the box - 1 minute.
  • Retrospect (1 minute): how was your moving? Any insights?
  • Repeat until all boxes moved. 
There will be 10 such iterations, 3 minutes each. In total this will make 30 minutes. 

Now, lets do waterfall. 
  • Long planning (10 minutes): you take those 10 boxes, you take those 10 boxes and etc. 
  • Move the boxes - 10 minutes.
  • Retrospect - 1 minute.
Total time: 21 minutes. 

Now, if you think that this example is not fair, then you are right. 
Usually, agile will spend much more time shuffling already moved boxes as they are not in the right place. Yep, agile processes excel at re-work. Since the goal is to make the minimal working version at each iteration, many times it is not the optimal one. Then it has to be re-structured and re-done. This will add more time, but the process is enjoyable and team is having a great time at all those stand-up meetings. 

Why do agile then? 
The answer is simple: because you want to be agile (this is me trying to be funny). Notice: not fast, agile. Lets say that 12 minutes after the start product manager decided that boxes have to be moved to a different location. 
  • Agile process can adjust on the very next iteration, i.e. every 3 minutes. Total time will be: 12 minutes (before the change) + 30 minutes (to move the remaining boxes and those that were already moved) = 42 minutes
  • With waterfall you will have to re-start the entire process when it ends. This is basically because there is no process to stop the waterfall. Total time will be: 21 minutes (to complete the first iteration) + 20 minutes (retrospect and blaming one another) + 21 minutes (move the boxes to a new location) = 62 minutes.

Sometimes, being agile actually gets you faster to the ending point. This happens when requirements keep on changing or when you are running in zig-zags under fire. 

Saturday, January 24, 2015

Developers Guide: Why do we need Product Manager?

If you are a developer, I know what you are thinking: "We don't need them! They only make noise, create meetings and do no work!"
Well, you are wrong. They do make a lot of noise, create meetings and do not code. BUT, we do need them. 

First some (mucho little) background knowledge about Product Manager job, whom I will call PM in this piece. There are two kinds and two types. 
type \ kindGood Bad
Inbound

Outbound


While everybody can tell Good from Bad, Inbound and Outbound require explanation. 

Inbound PM usually comes from development. He is a technical guy and feels at home with the architecture. Thus, the prefers to define to engineering how the product looks, behaves, what it does, how the features work and how many concurrent users it should support. Such PM works closely with the engineering and writes detailed specs from which architecture and test strategy/plans are derived. Writing those specs is a LOT of work! Microsoft has come with some magic number of 1 PM per 3 Developers. However, their PM's are also program managers, so you could get by with 1 PM per 5-6 developers. 

Outbound PM can be recognized by the spec he provides. If the spec is an Excel file with one-liner per feature, then this is an outbound PM. Such PMs work with marketing, sales, professional services and customers. They concentrate all the input coming from the outside, analyze it and digest in PRD. Clearly one person writing such specs can provide a work for gazillion of engineers. Just write: time machine and teleportation. Done. BUT, gathering all this input, analyzing and deciding what is important and what is just a junk also a LOT of work. Still there is no need for 1:5 ratio, it easily can be 1:20 (depending on the project). 

Clearly, this is a simplification, as just like people are not pure optimists and pessimists, PMs cannot be clearly cut into inbound vs. outbound categories. Most of the PMs are somewhere in between with some strong tendency towards one of the categories. This tendency defines the focus, effort, amount of invested time and consequently, deliverable content. In that order. Here actually lies a problem with PMs and this is the main distinction from optimist vs. pessimist separation. Wake up, this is the important part: 

I (just like 99.999% of the people) don't need to decide whether I am an optimist of a pessimist. It does not matter to me and I don't care. PM, on the other hand, has to decide what type of PM he/she wants to be: inbound or outbound. He cannot be both and he cannot move from one side to another. Just like I cannot be both optimist and pessimist. 

The problem is that some PMs do not decide, so they belong to the new category: "Not decided yet". 
This leads to the following table and I will fill it in as well. There are no "pros" in "Bad" column for obvious reasons. 

type \ kindGoodBad
InboundPro: the product advances really good and fast, and the product is very consistent to the users.
Cons: the users might not buy the product as it does not solve their needs
 Developers ignore those PMs, but they keep on trying to define low-level things, there are constant clashes between PM and Dev.
Not decided yetPM is able to pull a little bit of everything. If Dev Manager is good and can do Inbound work (or at least part of it), then things will work out. If Dev Manager is not good, then PM will quit and the fate of the project will depend on the next PM.There is no direction and no customers. PM and developers  both clash one with another on daily basis (when PM decides to be inbound) and blame one another. 
OutboundPro: the product does what customers want and solves real problems.
Cons: The product looks like a patch-work. There are no conventions in UI, names or behavior. Each developer decides on something else and it shows. 
Nobody wants the product and it also does not look good. PM and developers blame one another. 

To summarize this already long post: you have to decide whether to go with an affair or a spouse, and then do your best there. The indecision period is very risky.  

Friday, January 23, 2015

Career Advice: Stop Whining and Do Your Drill

"I feel stuck man. Not sure what potential I have at my current job. I just not happy here. People are great, but something is missing...

This is not the first I hear that, so I know exactly what to do. Usually I slap the guy, but this one looks like he could slap be back, so I smoothly move to the verbal part:

"Stop Whining and do your drill"

We, read as "software engineers", were trained to build products. Why your career is different? Do you know how to build a product? If yes, then you know how to build a career. Before I give you a recipe there is one catch. 

Career is not only climbing a corporate ladder. I have decided a long time ago that I want to work only on interesting stuff and made it a goal. Lately, I have noticed that I am good at building a new stuff, so I want to concentrate on that. One of my ex-co-workers decided that he wants to be happy and be home at 17:00. It can be anything really, not only "become a VP".

Now the plan:
  1. Define where you want to be in 15-20 years. 
  2. Divide it into 3 year chunks. 
  3. Think how you get to the first milestone.
  4. Get to work.
Oh, you don't know where you want to be in 15-20 years? Well, there is a different method then. Designed especially for guys that don't know what they want in a long-run: Agile Development. How does it look in Agile? Simple.
  1. Define your goals for the coming 3 months. This should be easy as the goals are simple. They don't even have to be career/development goals. You can say: "I want to learn something new", "I want to feel that I've done something" or "I want to start some new project". It can be anything that you can somehow know whether it happened or not. I suggest to record your current state when you do that for comparison. You should also think about the goals and how to achieve them.
  2. After 3 months check where you are. If you have achieved your goals, then return to step #1.
  3. If after 6-9 months you are still unhappy, then you have to seriously re-evaluate your goals. There is something wrong with them or with how you achieve them. 
  4. If after 9-12 months you are still unhappy despite all the above. Start looking for new options. It is not worth it. 
  5. If after 2 years you are still unhappy and at the same place, come to me and I will slap you. 
Good Luck!

As a side note, the company I work for (EMC) has a quarterly goals system. It is mandatory, like in many other places. This system actually can be used for the agile method. It also will give you a feeling of purpose doing it.

Monday, September 29, 2014

Wasted Time

Today I have defined a gated check-in build in TFS.

In other words, when a developer check-ins his code, the code is built and if it passes correctly the code is checked into repository. We thought about doing something like that in my previous gig, but it was estimated as a couple of months work and was dropped. 

We did not have time to sharpen the saw. We were busy fixing broken builds.

Today I did it in TFS. I had TFS server running with source control. I had a sample code in C#. I had a build agent installed on another machine and file share server running. Nothing was installed on file server, it was plain Windows 2012 server.
  • Hmm, lets define a build for the path in version control. 
  • Pick "gated check-in" build option.
  • Few more options, like retention policy.
  • There is an option of where to put build artifacts. I need a new share on the file server.
  • Go to the file server. Define a new share. 
  • Back to the build configuration and put the new share. 
  • Save. 
  • Change a code and commit. 
  • Open a panel and see the build progress. 
  • Hmm, progress is printed...
  • Looking good...
  • There are 3 warnings...
  • Need to fix them later...
  • Done.
Look at the clock. 10 minutes passed.

I will say that again: the entire process took 10 minutes.

God Damn!!!!

Tuesday, August 26, 2014

Why your VP is just like a Godfather

Anything."

Tempting. Very tempting. It is like having a school bully to owe you a favor. Who would say "no" to you now? You have the biggest stick now! "You don't cooperate with me? I will talk to my VP!"

What people do not understand is that asking VP to solve your problems is like asking Godfather for a help. There are strings attached. More often in the end, you will wish to rewind the time to stay with your original problem.
You have found an unbelievable deal on iPad in your local store! You run there and buy one. You run home, unpack it and it does not work! The iPad does not work. Naturally, you want your money back. Do you go to the local "Godfather"?

I know what you are thinking: "But, my VP is such a nice guy".Well...
  1. When you present your case to the VP, do you know what he will say? The response might surprise you and not necessary for the good. What if he listens to you and to the other side, and decides that you are the one who is wrong? What if the Godfather decides that you don't get your money back? Are you prepared for this? What if the shop owner is his brother-in-law and you will have to pay him even more for the trouble?
    This leads to the second point:
  2. What do you do if you do not like the answer: "You don't get your money back!"
    What now? Do you go to police or a bigger boss (Senior VP)? Do you want to go to SVP with this problem? CAN you go to police with this problem?
  3. If you ask for decision, you comply with the decision. Today you went to VP and it worked. You have got what you've asked for. Next week, somebody else will ask VP to get something from you, instead of talking to you. Do you want this to happen? 
  4. You have asked him for a favor and now you owe him a favor. So, you have got your money back. All is good, until he asks you for a little favor: "You work in downtown, right? Please take this package to my friend there". Do you say no now? 
  5. Every ask for VP's help, it drains your power both in VP eyes and in eyes of others. Going "up" for a help, means that you cannot solve this issue alone.
    You draw a limit of your abilities by yourself!
    Next time, you will get less responsibilities, as everyone knows that you cannot solve such problems alone.
  6. You grow when you overcome obstacles. It has to be hard. If there is no pain, there is no gain. Bringing help reduces the pain, but it also takes away the gain.
  7. This is no fun.
    I loved playing Doom. It was so much fun. Up to a point where I've got to a level that I could not complete. I've wiped the level clean, but the boss. For some reason, I just could not kill them. Time after time, I've tried and failed. Tried and failed, tried and failed.
    Then, I've found a cheat for immortality. I have passed the level. The fun has passed as well. I don't think that I have ever completed Doom. It is no fun playing with cheats.
Not everything is bad about upper management thought. There are also good things about consulting with your VP:
  • get your problems solved quick
  • see higher-level view of the product
  • get to know more VPs, as usually they come in packs :) 
  • more exposure
  • feel more important
It is up for you to decide what to chose. Me? I always ask myself: "What would Keyser Soze do?"
If you look for me, I am busy solving my problems by myself...



Friday, May 30, 2014

Why Should Customers Buy Your Product?

In my new product, we are still trying to define the killer feature of the product. We are getting closer with a lot of sweat, shouting, cookies and coffee.

The question is "why should customers buy our product and not competitors?"

The answer, is not surprisingly: it depends.
Our product manager wants the product to do stuff that competition do not do. The reason they didn't implement those features is because they are physically impossible. Let's just say that one of them is a time machine.
I don't like being just a negative guy and saying people, even product managers, that this is impossible. I want to do constructive, so I've compiled a list of things that we can do which will be our IP. Or in other words, those are the reasons customers will buy from us instead of the competition.

  1. Algorithm, a.k.a. Idea. This is the most common thing people are looking for. Every geek I've talked about doing startup invariably talks about "having an idea". If there is no idea, there is no product. Google's page rank is a great example. Another great example is ...
    It talks to our engineering hearts, but even for Google it take time to come up with their second great idea. This would be, ehhh, news or maybe, glass? Why this IP type is rare? Few reasons:
    • There is only one "the best idea in the world" idea in the world. It is hard to find one. It is like winning a world championship.
    • In many cases, there is no such thing as "best idea". Is there a best software developer? Nope. Because they cannot be compared. How do you compare web developers and assembly nerd? How do you compare architect of operating system with a coder that writes optimized code (John Carmack)? You can't. There is no such things as best developer! Even though, TopCoder might disagree...
    • Most of the problems are not solved by one idea or an algorithm. Usually things are much more complex than that. Google could fail even with page rank. They had to build a huge datacenter, invent Map-Reduce, spread things around the world, build indexing engine, best crawler, hire enough good people, resist pressure from investors and etc.
    • Nobody is a world champion forever. Everyone will bite a dust in the end. The same is with (many) algorithms. There always will be a better one. If all you count on is the best algorithm, you will fail when the next "best algorithm" appears.
  2. Expensive Hardware or Software. Not every company can build a satellite, a tank or a ship. Neither every company can build a cloud or operating system. This is not only an engineering undertaking, but also a huge investment that only a few companies can afford. As a big company, we can afford to target big and expensive market, this could be our salient feature.
  3. Trust. Little trust is required to sell 1$ application to users, but how about 1M$ system? Will "Bank of America" even let some small company to present their product? Not very likely. I have been in storage startups before. It is damn hard to make a customer not only to trust your product with their data, but also to pay you for this. Microsoft, on the other hand, have bank's trust already. They do not have to deal with this sort of stuff.
  4. Get dirty. Do a stuff that others are not willing to do or simply offload the stuff others don't want to do. There is plenty of stuff that is not sexy, but it needs to be done and people are willing to pay for it. This is why data conversion companies are huge business, why there are some many project outsourcing companies and why IT is moving to the cloud. This is "buying free time with money" for IT guys.
    • Convert data from one format to another.
    • Connect to some old database.
    • Upgrade existing software to the new technology.
    • Support many different types of printers or custom made hardware.
    • Run Exchange servers or a version control. 
    • Buy licenses for Word and run file servers.
  5. Just works. This is nothing magical about this type of software. It just works. It has been around, probably version 7 or 11. It has all the right functionality and nice UI. It works fast, good and users love it. It is a result of years of development, feedback of many users, many versions, bug fixes and incremental development. Those years and efforts are the IP of "just works".
What is the right sort of IP for us? How will we succeed?

I don't know yet, but I do know what is success...