RSS
 

Archive for the ‘People’ Category

Agile Tour 2010 – Part II

16 Nov

This is a second part in the series of blogs about Agile Tour Israel 2010, see Part I.

For “Open Space” session I took part in presentation of Guy Korland (@g_korland), VP R&D at GigaSpaces.

What was really unique about GigaSpaces is not their level of Agility, but the level of automated testing.

From my experience, this area is a weak point in almost any organization. We know how to write software, we know how to create a backlog and split releases to sprints, we know how to get feedback early to adapt. But more often than not we have no idea how to test the product properly and automatically. From all the people I have talked to personally, very few are actually sold on TDD or at least try to take it seriously.

The reasons are 1) lack of time and 2) complexity, especially when non-trivial UI is involved. It takes a lot of time to create initial infrastructures, it is hard to get it right and it is even harder to keep them growing together with a product. It is a serious effort and one, be it a single person or organization, has to be honest about investing in it for real. This situation is similar to Configuration Management: customers don’t buy tests so the incentive to create, improve and maintain them is unsurprisingly lower than to add new features and services. If a company can operate successfully with the current code quality why would it get into a TDD?

It is good to see how GigaSpaces made a choice to be a different company where everything starts and ends with tests, tooling and automation. How about full build cycle executed every 10 minutes? How about 8 different kinds of tests: unit tests, integration tests, regression tests, performance tests, stress tests, scalability tests .. Geee, there should be 2 more that I don’t remember already. How about major and minor releases treated identically?

I have to admit, GigaSpaces environment really impressed me, it was certainly worth going to Haifa just to hear about it.


“Values, Principles and Practices: Moving Beyond ‘Names’ and Getting to What Works”

  • Hillel Glazer (@hi11e1), CEO at Entinex.


    Although this talk was considerably more emotional than factual, it brought a couple of excellent points about Agile values and principles.

    • If you tried Agile, CMMI, or Crystal Clear and it didn’t work – you’re missing the point and focusing on practices.
    • No more excuses, Agile works. Even if you’re too big or you’re located in Israel. It still works.
    • Practices only work in a specific context. Practicing piano improves the techniques but it mostly works for a given composition.
    • Values and principals will allow to get better at any practice.
    • We can list our values in order and set a priority:
      • Family
      • Financial stability
      • Customers satisfaction
      • Communication
      • Transparency
      • Waste, paperwork
      • Taking time away of what really matters.
    • Principles guide our actions, considering our values and their priorities.
    • Practices is where most teams are frequently stuck, day to day activities to carry out practices.
    • The right question is not “What does law say?”, but “Are we doing things that make better for the company?”
    • Practices can be wrong, but values don’t change easily.
    • When values and principles are known, the behavior will align with what needs to be done.
    • When you have values, all other things will fall in line.
    • For every value out there there are multiply principles, for every principle there are numerous values.
    • Set a goal.
    • Scrum is a good improvement, but it only goes so far. It may be not as mature as people are.
      I would love to get some more explanation about this. It looked as if Hillel implied that CMMI is a better alternative to Scrum.
    • Success stories started not with practices, but with attitude and values.
    • Values and principles should be visible to anyone.
    • There’s no “small stuff”, problems only get bigger.


    “Fear and Courage – The Agile Coaching Conflict”

  • Haim Deutsch (@haimd65), Certified Scrum Coach and Certified Scrum Trainer.


    Haim discussed the main reason people may reject Agile: fear, our main atavistic instinct.

    • Mankind developed atavistic instincts to protect itself. Fear is one of them.
    • Fear is defensive mechanism, it either boosts a reaction or blocks it completely.
    • We were trained to sublimate our fear, we are given prizes for hearing our fears and “playing it safe”.
    • But we live at the edge of the Chaos with complex systems that are less predictable and are harder to plan.
    • Overcoming management fear – “Why should we?”
      • Separate subjective and objective issues in an organization.
      • Start with subjective: collect sensitive information about what does and does not work, show existing problems.
      • Continue with objective: show how business values increase and risks decrease with Agile, put numbers.
    • Overcoming team leader fear – “Self-managed teams .. Are they killing me ?!”
      • Discuss and review current roles and responsibilities.
      • Match what works with Scrum.


      I think it is obvious that there’s no much left for middle-level management in Agile. I’ll get back to that in a moment.

    • Overcoming team members fear – “Self-management? Commitment? Visibility?”
      • Agile can only be adopted once. If it fails – motivation goes all the way down, people become cynical.
      • Take care of team motivation: vision, shared goals, mutual trust and accountability.
      • Do not fear conflicts.
      • Provide a stage for everyone equally.
      • Play Scrum games and simulations, it may help to jell the team.
    • The tool to fight the fear is to convert it to courage.
    • Courage can be learned and trained, much like in army.
    • Courage is usually based on feeling and desires of people involved.
    • Team can learn to talk about feelings using games and simulations.
    • What is said inside a team never goes out, it builds mutual trust.
    • E-mails don’t always work. Try “E-mail game” where people correspond through e-mails on a whiteboard, each level has a different amount of mails allowed: the higher – the lesser.
    • Get personal, start talking face to face.


    Some thoughts of my own about “Why would companies not go Agile?”

    • Agile invites flat-structured teams but companies and especially managers love hierarchies. That’s how human history always worked. Hierarchy pays off financially, gives control over other people and provides a sense of superiority.
    • Agile builds on a self-managed teams but most managers believe people need to be managed and wouldn’t be able to deliver anything if left alone.
    • Agile invites much more honesty, openness and reality into a workplace than it is usually there. Scrum planning makes “mission impossible” and any other conflicting kind of tasks obvious and doesn’t allow managers to get away with them. Daily standups easily expose unproductive and procrastinating employees.
    • Agile assumes people would share their feelings and embrace openness to develop a mutual trust. Sharing feelings is not a regular thing in most workplaces and not many people have any practice in doing that.
     
  •  

    Agile Tour 2010 – Part I

    15 Nov

    Agile Tour Israel 2010 took place in Haifa this year. Normally, I’m not a big fan of talking about Agile as it would be like talking about eating or sleeping for me. “Let’s get something done, see how it works and then clean it up” is how I worked long before words like refactoring, Agile, XP and Scrum became so popular. I just couldn’t do otherwise as I never understood why would anyone bother writing a design spec that is almost never used afterwards. It may work for organizing some thoughts, if one feels it is needed, but usually no more than that. And I much prefer drawing things!

    Anyway, I decided to visit this event to see how Agile is doing today. Is everybody doing Scrum or there’s something else? Basically, yes. Lots of companies seem to be doing Agile for real, even those I would never think of, like Comverse. And I’ve heard no serious discussion of any other system than Scrum. So Scrum it is!

    “Case study : NSN – Implementing Agile in a large organization”

  • Orit Karlin, R&D manager at Nokia Siemens Networks
  • Aviram Eisenberg (@aviram), CEO at Ignite Outsourcing


    Orit described transition to Agile in NSN, a large corporate with 160000 employees:

    • Waterfall works much better for large organizations: progress is planned, expectations are drawn, monitoring is in place and everything is very hierarchically.
    • But since it is much harder to change direction for such companies, they need Agile even more! Eventually, waterfall just didn’t work well for NSN (I wish there were some concrete examples brought).
    • Switching to Agile had its own challenges for NSN:
      • Syncing between different teams, running as independent startups.
      • Breaking existing hierarchy and specifically-experienced teams.
      • Dealing with internal organizations that don’t really belong to Agile transition.
      • Doing Agile globally across the world.
      • Dealing with teams identity.
      • Agile coaches were coming from a different culture and speaking a different language.
      • Dealing with managers that were “out of job” but still with responsibilities and deliveries in their hands.
    • The solutions were:
      • Local coaching. People using the same language, coming with the same mentality and background, knowing, feeling and understanding regional nuances.
      • Go in phases. Phase I is a limited number of local pilots, no extensive “buy in” is imposed, no global operations yet. The goal is to create a success and make a lot of noise out of it.
      • Phase II is maturity: responsibilities are defined, marketing teams are involved, features are developed in an agile way.
    • Switching to Agile worked well for NSN: it created a very strong buzz in a company, people see it positively, and there is much more readiness to make the transition.


    Aviram explored this process from a coaching point of view:

    • Strong management backup is required.
    • It takes for the process to settle down through all internal conflicts and politics.
    • When in doubt or endless arguments, it helps to have a guru to reference to: “That’s what master said!”
    • First initial phase:
      • Do not force theoretical Scrum, match needs and pain points, make successful pilots.
      • Choose a meaningful pilot that minimizes existing problems.
      • Multi-site development is not recommended at that phase as it would be physically hard to maximize people interactions. Distributed Scrum is different from a usual Scrum.
      • Identify change leaders, create a success.
      • Give pushers all tools needed, use empowerment efficiently.
      • Success does not come from doing Scrum practices “by the book”, it mostly comes from organizational changes which are much harder to achieve.
      • There may be people that feel threatened by Scrum: “What’s in it for me?”
      • It is important to learn from problems, identify change leaders and rejectors, create a winning team and involve all stakeholders.
    • What successes brought into organization:
      • Better projects visibility, smaller gaps in planned vs. actual, targets became more realistic.
      • It became possible to keep predictability of each version.
      • While waterfall provides expectations 1 or 2 years ahead, “knowing” that much in advance is troublesome: company will be slow to move and react. In Agile, smaller and faster teams still provide expectations ahead but their time windows are shorter and more dynamic.The key word is balance.
      • Prioritzation works better, features are cut more easily, “knowledge islands” are reduced.
      • Teams are happier, “get on the code” happens faster, marketing teams are product owners.

    Part II

     
  •  

    Software development communities in Israel

    20 Sep

    The number of software development communities in Israel has grown to the point where I felt a need to make a list which I intend to keep as updated as I can.


    Feel free to comment and let me know of any other community!

     
    4 Comments

    Posted in Code, People

     

    Configuration Management position – can be done by anyone. Or can it?

    21 Aug

    Configuration Management was always my passion.

    Somehow, I have always had this thing for builds. I don’t know why, it just happens to be that way. Over the last 10 years I have accepted various development positions, but very few were actually related to CM. Occasionally, I accepted CM tasks for the joy of it. But there were other reasons: most of the time any given software project is a mess at the CM level. Secondly, most projects on which I was working had no one assigned to this job.

    Somehow, builds were supposed to take care of themselves. However in practice this does not happen magically by itself: builds are usually written by some poor guy, temporarily assigned to this task with one goal in mind; to get it over with as soon as possible. And I don’t blame him.

    It made me think. What’s wrong here? Why does it happen this way, that very few projects can demonstrate well written build logic, where code is reused and there’s no place to copy-paste? Why do some managers believe there’s absolutely no need to assign a dedicated resource to deal with CM issues and it can be easily taken care of by any developer? And why when these managers experience a messy environment they are still not convinced otherwise?

    Lots of questions. I’m going to try and answer some of them.

    Why does it happen this way that very few projects can demonstrate well written build logic, where code is reused and there’s no place to copy-paste?

    • Most developers don’t like dealing with builds.

      This is the root of the problem. From what I have seen throughout my career, developers really don’t like dealing with builds. My guess is that it’s just plain boring and unexciting for most “normal” developers and you need to be somewhat abnormal to even remotely like it. What’s exciting about reorganizing files and watching closely how archives are actually created? Not much I suppose.

    • Build code is not shipped and you get no credit for improving it.

      Build logic is usually hidden from people’s eyes: “We just run this batch, we don’t really know how it works”. Since in most cases it is not the company’s business to sell their builds, the incentive to understand and improve them is very low. No customer gets to see the build in any event.

    • Excellent build tools have not existed for years.

      First there was Ant and there is Maven. Why were they not-so-good? They made two important things hard: custom or conditional build logic and reuse. Lack of built-in conditions made builds full of variables, flags and other awkward ways to simulate a simple "if". Lack of built-in reuse functionality made people copy-paste tons of code without ever trying to organize it.

      It was Ant which made an awfully wrong assumption: “There’s no place for "if"s and loops in your builds. Builds should be straightforward and go from A to B to generate a C, no questions asked.” Ant-Contrib was a savior here but reusing someone else’s code was still not an option; <macrodef>s only brought their own issues. Eventually, people turned to “copy-paste”, the best re-usability solution around.

      In Maven, conditional logic and reuse are also far from perfect. To a very limited extent conditional logic can be done with profiles and Ant/Groovy snippets while reuse is provided by <parent>-ing other POMs. I believe this is not flexible and elegant enough. In addition, Maven declarative nature makes any custom build tweaks extremely hard to implement: if there’s no attribute for what you want – you’re out of luck. The only sensible way to deal with all those limitations is to develop Maven plugins for every customized need you might have. Only then one can keep his POMs sane, not blowing to zillions of Ant tasks. But plugin development is not accepted readily by most developers so they usually turn to "maven-antrun-plugin" and .. here we have all Ant issues again.

      The problem with major build tools we have had for years is that they are mostly about straightforward build steps rather than about intelligent build logic. They lack basic build language which is nicely taken care of today by Gradle which has realized that builds are programs and deserve their own build language and build model. When Hans Dockter, the creator of Gradle explained that builds always have their own logic and should be taken as seriously as a production code, I was extremely happy to hear that. Finally, there’s a tool creator who gets it.

    Why do some managers believe there’s absolutely no need to assign a dedicated person to deal with CM issues?

    • A dedicated CM resource is a wasted salary that contributes little to the company’s mission and profitability.

      This is so untrue but, unfortunately, that’s exactly how a CM position appears to some managers: a waste. Managers are unable to get answers to corporate questions such as “Can you demo what you do? Can you sell it?” In the absence of any commercially viable answers they wonder why a CM is required at all. Ironically, the most important aspect of any project gets the least attention. Projects with poor build logic are extremely hard to develop, maintain, test and release. It surely comes back to money and lack of understanding but some people fail to see it this way.

      If management believes that dedicated CM positions are not required then why do they keep an IT team? They can’t demo their work either. CM is required to keep things in order and to keep projects from falling apart.

      One possible way to provide a good explanation for the real value of a CM position is to show the cost of not having one. Usually it shows itself as delayed releases, people spending valuable time on activities that are not part of their jobs, notable time it takes to upgrade or change large portions of code, lack of a clear internal and external release processes and, as a result, a great deal of resources, energy and time wasted. And time is money.

      I have no doubt if I had to measure benefits of having a good CM it will always outweigh the mere salary.

    Why can’t you split CM tasks evenly between all developers? It can be done by anybody, right?

    This is a bad myth.

    • If you split responsibility nobody owns the problem and no one does anything about it.

      Software developers are far too busy to think of ways to improve builds. They can patch it somehow to remove the blocker out of the way but don’t expect them to give serious thought or make an effort regarding any build issue. Multiplied by developers’ aversion to builds in general, no wonder this approach produces little if any results.

    • CM position requires a very specific set of skills.

      As any other position, this one requires a person with a set of skills matching the job requirements. Why wouldn’t you split graphic design, backend logic or DBA tasks evenly between all developers? How would your application look if everybody was responsible for drawing icons, crafting RDBMS schema, and defining product scope? We surely know those tasks should be performed by specifically skilled people in an organization but, somehow, when it comes to CM “anybody can do it”. Why, oh why?

    What are CM responsibilities?

    It depends on your definition of CM. In some companies CM personnel are busy with baby-sitting ClearCase; they don’t get to write or think about actual builds. My definition of a CM’s responsibilities is as follows:

    • Choose, install and maintain build servers and tools.
      Consider upgrade or migration when a better build tool is being provided by the market.
    • Be deeply involved in and throughout the development process.
      “Outsider” view works much worse as it lacks knowledge required for making critical decisions, improvements and optimizations.
    • Monitor and “align” third-party library versions.
    • Implement build logic, educate developers and provide support where needed.
    • Constantly review company’s builds and search for overlaps, contradictions and unnecessary complexities.
      Develop solutions to prevent these.
    • Define and enforce version control system branching policies and guidance.
    • Define and enforce general build practices, product versioning, and release processes.

    As one can see, the list is not short and it is far from being a naive one-liner like “Write Ant scripts” as some managers may conceive CM duties.

    What are the skills required to perform the above duties well?

    • Genuine and natural ability to get things in order, always do the right thing and keep it that way!

      From my experience, a good CM person is a gatekeeper to prevent disorganization, lack of knowledge, interest and whatever it is that is preventing companies from keeping their projects organized, timely built and tested. The reality can be sad at times but a good CM professional fights it and doesn’t allow himself to give up and become careless. Left to their own devises projects may eventually derail into a clutter and a good CM is supposed to alert and block any such attempts.

    • Good development skills.

      I think it is crucial for CMs to be good developers because sometimes existing tools are inadequate and it requires a CM to develop new more appropriate tools. These tools can be Maven plugins, custom Ant tasks, Hudson plugins or some internal Web applications; whatever makes things tick. So good knowledge of Ant, Maven, Java and Groovy is very advantageous. Armed with good Java knowledge, CMs are able to understand and probably fix a lot of build failures, without resorting to external help. It’s about saving time and developing new solutions, whenever required.

    • Balls, curiosity, and good appetite for upgrades.

      Historically, companies are very reluctant to upgrade their build infrastructures, libraries and surrounding tools, like JDK. It can bring instability, failures and nobody really wants to deal with these. Indeed, it takes some will-power to undertake an upgrade in an organization. The upgrader is invariably responsible if anything fails and he is the one who needs to fix it. Consequently, one gets to witness organizations running with outdated versions of Ant, Tomcat, Spring and JDK for no other reason than the fear of upgrades. Good CMs should always be curious about new versions and insist on upgrades as part of their job irrespective of the resistance.

    • Good troubleshooting skills.

      One of the least exciting aspects of CM’s job is the obligation to deal with build failures. Sometimes it’s all too overwhelming – non-stop failures for various reasons: bad commits, lack of disk space, wrong OS, missing setups, and non-reproducible Hudson errors. Occasionally, it requires some emotional stability not to fall apart under the onslaught of problems but what it always requires is good troubleshooting skills: an ability to quickly understand what went wrong from looking at log files and analyzing all changes that were brought in recently. There are ways to deal with all of these, like bringing a system back into a working state and thereafter reverse engineering it to the point of failure, step by step.

    • Good communication skills.

      For any CM to successfully manage this otherwise challenging and sometimes thankless job requires excellent communications and interpersonal skills. It requires CM to convince some employees to change inadequate old habits and educating developers and users about the importance of good CM practices.

    In conclusion, I would say that there is no substitute for a good CM in any serious organization that prides itself and has an above average development environment. I tend to compare the CM’s position to that of a building architect who is in charge of the overall construction design, its services, function, maintenance, security, and infrastructures. Someone needs to have a bird’s-eye view of all development activities. In theory Software Architects should be fulfilling this job but in practice it is CM role.




     
    10 Comments

    Posted in Ant, Maven, People

     

    "I’ll send them an e-mail" – do you really believe it’s enough?

    01 May

    In my career I used to work as CM engineer many times. It so happens I just love dealing with builds.

    When you’re a CM engineer – you usually get to change many things around: how builds work, where’s the main POM, how jobs are configured in Hudson and when they’re scheduled to run.
    Lots and lots of things.

    What happens when other people need to be informed about those changes?
    Or they actually need to do something about it ?

    For example, when our Artifactory instance has moved to a new server – all developers had to update their "settings.xml". Technically, this situation brings no issues – it doesn’t take a lot to make the move, the time is only spent for exporting the data and importing it back. But it’s still very tricky as lots of people are involved now: when old Artifactory instance is shut down – lots of builds will fail if "settings.xml" isn’t updated.

    So I’ll just send the new file by e-mail, right? Wrong.
    Many people think e-mails is the best way to “let people know” but, unfortunately, in many offices it doesn’t work that way.

    Mails can be ignored so easily.

    Take a look at average user’s “Inbox” – how many unread mails will you see there? 10, 50, 300? I usually keep my “Inbox” empty – all incoming mails are filtered into relevant folders so when I get to the office in the morning I see the overall picture right away: 3 mails from my boss, 5 mails from our group, 2 mails from QA, etc. Very few mails are usually left in “Inbox” and it allows me to know what’s “unread” right now so I can easily decide who do I ignore or start with first. I try not to have any unread mails by the end of the day so that my counter drops to zero when I go home.

    But many other people have an “Inbox” full of all last year’s e-mails and when they see “30 unread messages” – they don’t really know what’s there until they go over all of them, one-by-one. And when they do read the message – they can choose to ignore it or misunderstand the importance of the change.

    That’s life and and we can talk endlessly about how educating people about time or mail management will help .. Fortunately, there’s a simpler way – we can talk to them.

    In our place, it only takes an hour or two to step into all rooms, announce the change and get the feedbacks. And it works much, much better as people now get to talk back. I let them know there’s an e-mail sent, I make sure the importance of the change is clear and, of course, I try to listen to what they have to say.

    When I was first suggested to go room by room and talk to people I was wondering how come such a waste of time can be of any use. After all, it’s all written nicely in mail or Wiki – why bother then? But after doing it once I’ve felt how much difference does it actually make. How much information and attention I had back from people.

    We can schedule a meeting for the whole group, of course! Whatever works. The main idea is simple – there’s no replacement to the talking. I came to believe it’s the combination of published information (that can always be referenced later) and verbal communication that provides the best way to “let people know” and ask for their cooperation.

    And it also makes everyone involved feel much better along the way!

     
    1 Comment

    Posted in People