Tuesday, November 15, 2016

Agile

Let's start quite simple. I will try to explain why I don't like Agile. Well for first, it may sound stupid – it killed World of Warcraft. And from now on, I will use a lot of Video Game industry analogies. I, myself, have worked in quite different industries all around the world. I have built IT systems for heavy production machinery companies, telecommunications, health care, but video game industry is, how to say, one of my favorite, as being a geek.

Okay, how does the Agile killed WoW? Well it’s still one of bestselling MMORPG’s of all time’s, there’s no doubts about that, but does it still can accumulate same amount of player base as back in 2007? Sure, it’s like, what 12, years old game! But still, if it’s perfect, millions will use it also after a 100 years. Let’s say, a car! Petroleum internal combustion engine was invented back in middle of 19th century, but it’s still widely used standard for cars. Sure, it has uncountable innovations up it since Karl Benz wife drove that first car, but the initial workflow is same, same for almost a hundred years. So, let’s go back to the WoW. Agile, tells us to release smaller things more frequently! But does it says anything about quality? Ye, maybe, I will not go through whole thing as it’s useless anyway. Quality of those small things have dropped dramatically. Back in vanilla, you had four raids, each unique and you had to found 39 more people (what was adventure on its own), dedicated as you, to beat those end bosses. Today, you have, what, a forty raids, for whom you can use Group Finder and just bounce in to raid or dungeon quickly beating it and jumping to next one, without learning about dungeons lore, and all dungeons look same and boss techniques are same. For, god, Blizzard even doesn’t care about creating new ones, they just take old ones, tweak boss health bars and present them as new HEROIC mode, basically by using same assets, but asking us new money.

Fine, let’s get back to real life. Above, was frustration number one, in a long list of my frustrations that today Doom IT.

Agile. Main point on Wikipedia says, ‘set of principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. It advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change.’

Let’s go through them all (we may not finish today):

  • requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams

Okay, this thing, has nothing to do with Agile. It’s a normal process of everything you do in your life, been there for last four thousand years. Teams will always be self-organizing, and will cross over to other teams. What does even ‘self-organizing’ means? God damint, if you don’t know how to organize your work (any kind), you’re done, go home! People organize things they do, and human being is social animal, so he will cross paths with others always, it’s not some specific principle.

  • it advocates adaptive planning

Again, basically same thing, you have to plan your work, but with catch – ‘adaptive’! It beans, if you screw up (and by using Agile you always screw up), you change your plan, and continue as nothing happened before. Of course we always have to roll with punches, but still, put this as the principle? Main principle? It already shows, that you actually don’t know how to plan your work, you just assume (ass of you and me) that you will screw up and you will have to change plan.

If you spent quite an effort in planning, and checked everything eight times, then your plan doesn’t have to fail. Sure, thing, you can create plan B (as in movies), that’s normal practice to have. But just in beginning already gave up an assumption that you will fail?? That’s wrong.
Japanese have this thing they call ‘80/20’ (I didn’t thing about annotations for the first time, but to fair and for everything to look legit, I will try to find more resources on things I will talk). Basically, it means 80% of planning, 20% of actually build. ANYTHING – software, construction, car manufacturing, doing your fitness trainings. BEFORE YOU START ANYTHING –PLAN.
You may ask, why do I think this works? I will answer you like this:
                Honda – best bikes in the world;
                Toyota – best cars in the world;
                Sony – best home entertainment electronics in the world
                Yamaha – best professional sound systems in the world
                do I have to continue…
And this all, only because Japanese are hardworking, dedicated people and they believe that planning is most important part of project, not actually building it.
Agile fails here. First, it already assumes that plan is shit, and you will have to adapt to on constant change while you’re doing build. Don’t get me wrong, change isn’t bad, change is only law of life, as one famous person told us, but, if you constantly change your plan in the middle of the build on fly, it just gets you full of stress, and in the end nothing is done, as final result is nothing that was initial planned, but are compiled from different parts, each part from the each plan, you changed. Yes, take a glue, stick it all together and let’s hope it doesn’t break apart, LOL (that’s another story, on how companies nowadays implement IT system support workflow (by assuming that system will break in the first day of the release), will take note on that).

So, now some thing from my personal experience. Oh gosh, how much I haven’t bounced back and forward, just because, project hasn’t had a real plan… Manager creates plan (let’s say in Gantt chart), gives each team member tasks, but adds, when you start building, you can easily add a tasks to your plan… WTF? Did you then created a plan or no? Or do I have to do it on my own? If so, then mr. Manager, I’m done! Yes, I finished my tasks, open your plan and check! No, no, no, I don’t have to do those task, they are not applicable, I changed the plan, and you told us we can do so!

Then, next thing happens. By Agile we split build in phases (yes, we don’t split project in phases, we split build in phases, whatever that means). Phase one, you do plan, small analysis, you do build, unit test, done. Not done? No problem, we will just roll over thins thing to next phase! End of the last phase comes, AND WHAT A SURPRISE, you have about 75% of not done tasks from previous phases. Why did it happen? Because we don’t validate end of the phase, and start next phase before we finish first one. Imagine car, you have to change brakes on it, but you put yourself on a deadline, 15 minutes per task, so you took off tire, it took you 2 minutes, so now, you smoke for 13 minutes. Then you change brakes, 15 minutes passes, but you haven’t yet done half of it, aaa screw it, let’s roll to next phase, PUTTING TIRE BACK ON.
So, now team is full of stress, as they have to build all previous phases in one phase and the deadline is close. Yup, we use ADAPTIVE PLANNING.

  • evolutionary development

This is just marketing use of words, that doesn’t have any meaning besides this: Client asks, how will you build my system, manager answers, we will use “evolutionary development”, client blushes, as he has no clue what that is, but understand that “those guys” are professionals.

Okay, I can’t take this anymore, let’s continue next week.

Monday, November 14, 2016

Lessons Learned

Before I even start, I wan't to get some things straight.
1) I don't like agile. https://en.wikipedia.org/wiki/Agile_software_development
it's the one of the reason, why nowadays software comes out full with bugs, and a lot of time even don't come out at all, but got postponed.
2) It's been almost seven years since I can call myself, a professional programmer. Before that, as amateur, I can go back to my tenth birthday, when I got my first computer with Norton Commander on it.
3) I'm total nerd and geek, by owning more than two video game consoles and two high end gaming PC's

Now, when we get out of the way things that you need to know about me, I will start. As I already mentioned, I have been working as a professional programmer (or software engineer, what ever suites you best) for last seven years (after I partly finished university (partly - that's another story)). And the biggest problem is that none, I repeat, none of the projects I have been working on, have not been postponed before their initial go-live date. NONE.
So, I just thought, maybe, I need to gather all this bad things I have encountered in those past seven years, and share my frustration with other people (if others do care as much as I do about this).
In this blog you will see a lot of me trashing on Agile Software Development and IT Managers. It's not that all of my managers where bad, not at all, some of theme where great persons and interesting friends, with whom I have built great relationships, but they are not good IT, I will repeat, IT, managers.
I'm engineer, and as engineer, I'm really picky and punctual, and when manager says to me, that project don't care how we name classes or tables, because, project doesn't have any naming convention, that drives me nuts. And when project implements new change control workflow, and also DRAWS a big MS Visio document based on that, but after two days, none of the people in project follows this, as it includes getting a lot of approvals, to implement your change and put it in the production. Manager just says, 'document is just guidelines, we don't have to follow it specifically'. Grrrr......
I will try to do post a week, and will not try do them really big, like, no more than 15 minutes of writing, and for you no more than 3 minutes of reading. Hope it will be interesting for me, and for whoever will be reading this, if anyone :) !