My views on software development life cycle

Post navigation

With new process and technology, new way of working comes. With Agile practices in place, some of the attributes of Agile are very common and famous. Most visible, and thus most well-known, attributes of Agile are open space, co-location of all roles, stand ups and retrospective. These characteristics of Agile have played very important role in making Agile successful especially in enterprises. Software development departments of big and old companies have benefited from Agile implementation. Although these are very important traits of Agile, these traits don’t make Agile on their own. There is more than these attributes in Agile and its implementation. Companies and their leadership always get confused by this. While creating new teams or transforming existing teams & departments, leaders often don’t involve Agile coaches or follow proper Agile transformation process. They go by either some other teams’ success or half-truth-knowledge. It has its only disadvantages, but I am not going to discuss it here. I want to discuss whether having Executives and People Leaders in open space with development teams is a good idea or not.

In a typical software development department at enterprise, cubes and office walls are coming down. Executives and people leaders have started sitting in open area by either choice or order. It’s a good refreshing change to see managers sitting right next to you and accessible. This kind of arrangement has its own advantages. When managers are sitting in same size open area that other team members are sitting, it creates flat hierarchy in the organization. They seemed more accessible with co-location and without cube walls. It’s also very easy to involve them in management decision with this co-location. Advantages are there for managers as well. Executives and people leaders sitting in open area and with teams, can get better handle on day-to-day work of teams. They can make connection with more human interaction they are going to have with team members. As it’s easier for teams to access them, it’s easier for them to access teams as well. Basically, with this flat structure, things get done quickly and more accurate.

Let’s look at some of the disadvantages. As I said, open space is one of the attributes of Agile, it’s not everything in Agile. When managers are asked to sit in open space and with team, it’s usually justified by Agile requirement and which is wrong. Agile wants all team members to sit close and in open space. Team members include everyone who is contributing to work products that finally contribute working quality software. Manager usually don’t contribute to work products directly. They are indirect influence makers and their work cannot be tracked by Agile team board. They are also usually assigned to more than one teams. And these are the reasons they don’t participate and are not invited to Agile tasking session. Similarly, they cannot contribute to retrospectives. Having them in the same location doesn’t necessarily make them more accessible. Management meetings, vendors engagement, business travel and other managerial & executive commitments can keep them away from their desk. Having executives sitting inside team room can also make some team members nervous, at least initially and may look like an attempt to micro manage. This is also the exact reason why scribes or iteration mangers are asked to avoid eye-to-eye contact in stand ups. Agile teams can become less autonomous with constant executive presence. Many teams like to have their tasking sessions and planning meetings right in team space as opposed to conference room. But, with executives in the same space, mostly on phone, it’s difficult to achieve this with the fear of disturbing them while they are on phone and have visitors. From managers’ point of view, they may not like to talk confidential items in open area. Many people leaders are engaged on a regular basis in talking about people, which is difficult to do in the presence of same people. Same is true if you want to fill out customer satisfaction survey or performance review documents. Many tasks in leaders’ lives are individual contribution tasks where they need privacy, and it’s difficult to get when you are surrounded by teams holding their meetings. Having or wearing cap while you’re busy doesn’t usually work!

I always believe that the best strategy is to use hybrid solution. Unless you have a real space constraint, managers can have two offices – one regular office cube where they used to sit for years and other open space where all team members sit. Managers can sit inside open space around stand up times and go back to their cubes for rest of the day. And repeat this multiple times a day if required. These scheduled can be published for everyone’s knowledge. This schedule can be shared across multiple teams as well. More you are closer to work-bee, more you should and can spend time with development teams.

However fascinating it sounds like to punish executives and people leaders and strip off their cubes, it’s not always a great idea either for enterprise or for teams. It’s not one solution that fits every organization or even everyone within the same organization. So, choose your method wisely.

P.S. – ‘Executive’, ‘Manager’ and ‘People Leader’ phrases are used freely in this blog and should be considered loosely defined. Similarly, ‘team’ and ‘development team’ have similar meaning with different context.

Let’s see some of the methods to remove or change members in an array. Method named pop works in an opposite way to push method. It removes last member from an array. So, if I use ohio_cities.pop, “cleveland” will be removed from this array and it’ll have only two members remaining with it.

Similarly, shift method is a complimentary to unshift method we learned before. It removes first member from an array. Companion of insert method is delete_at method. It takes index value of a member that you want to get rid of in an array.

If you have looked carefully to methods applicable to an array, you’ll see two methods that may look similar – reverse and reverse! – while both of these methods reverse array members, one without exclamation mark doesn’t modify an original array & one with “!” modifies original array. So, after using fruits.reverse, if you look at fruits array, it’s still the same

Observe the question mark at the end of the method empty? Ruby has many methods that ends with ? These methods have return type of Boolean. It’s like asking a question to ruby, very intuitive! Here we are asking if fruits array is empty? and ruby replies back loud and clear – NO!

Similarly, let’s ask ruby if banana and mango are included in fruits array or not.

Similarly, another version of slice is slice!, which modifies the original array. There is no explicit reason to use slice method, you can access element by just referring its index value.

>> odd[1...4]=> [3, 5, 7]
>> odd[1..4]=> [3, 5, 7, 9]

Here interesting thing to learn is how negative index works with arrays in ruby. Just like first member of an array has index value of 0 and all subsequent members have progressing index values, last member of an array has index value of -1 and negative indices count backwards from the end of an array.

There are a few array methods that aren’t widely used or not useful in routine programming, but provides powerful influence over a given array. The are some projects where they are actually broadly used. Some of these methods are –

zip, compact, collect, map, uniq, count, <=>, each, inspect

What? You didn’t find any example or explanation of what these methods are? Well, that’s your ‘end of the chapter exercise’! Good Luck!

Arrays in ruby are similar to arrays in other programming languages that you might already know. It has some uniqueness like negative index, multiple data types inside a single array etc. We will learn about it in detail. I first learned arrays in C programming language and since then I never have to learn arrays again. Any programming language I go to, I’ll take on its syntax to create and use arrays and I am done. In ruby, like everything, syntax related to arrays is fairly simple and intuitive. Let’s see how to create arrays in ruby.

In its simplest form, array can be created by listing its members inside square bracket (also called literal constructors). So, an array named numbers with numbers from 1 to 5 can be created by

If you’re very much attached to C like me, you’ll notice something very quickly. I didn’t declare data type for these arrays I created. I didn’t say what time of data types these arrays will be containing. I just created an array named months and added all members as strings and ruby just followed my order & didn’t complain at all. I think you know where I am going with this now. As you don’t tell ruby which types of members you want in an array, you can probably include different types of members in a single array. Let’s try doing it and see what happens.

If simplicity is not your type or you like to use new in every line of declaration, you can go not-so-intuitive way of creating arrays. You can create array my using in-built Array class and initialize it with new.

Essentially the best way to learn ruby is to try .methods to all the data types you know. So, if we have try prime.methods, we’ll get all the methods that can be applied on arrays. And then try to use some of the methods to get real hands-on pleasure in ruby.

On a subject of Cucumber – Cucumber and Cheese by Cheezy. Any thing coming from Cheezy is always great! In this books he explains cucumber from his perspective. It has some coding examples to follow. Only available in a soft copy format. Cheezy comes to Columbus very often to speak at various meetings and conferences. Make sure you listen to him whenever you get a chance.

I’ll keep on adding few books as and when I find them. There are some great books available in a world of Ruby and Agile that you can read all the time. But, as far as ATDD and Cucumber are concerned, there are very limited number of books available.

2) Research on a definition of ATDD. Find out all different kind of definitions, see what other people say about ATDD. Is it the same that you learned today? Or is it different?

All of you did some research on ATDD and that’s great. We looked at Cucumber’ official site. It’s not frequently updated, but visit this site once in a while and see what you find. When you go to home page, you see those 6 tiles… compare it with what you learned in second session. Is it similar or not…?

If you’re planning to attend, register there. Refer this URL for parking information. Lunch will be served. They meet first Thursday of every month. Read their blog or follow them on twitter.

Meeting Description –

Is Test Data bothering you?Does your cucumber test suite often fail because you don’t have enough Test Data?Is Test Data Management your biggest barrier (or not?!) in achieving efficiency in ATDD?How are you managing Test Data in multiple environments?Do you have a best practice to share with others on Test Data Management?Is there a tool that you think can help teams practicing ATDD with Test Data Management?Can you contribute to the discussion related to Test Data?

If you answered any of these questions in yes, then you should attend our meeting in March that focuses on Test Data and its management. It’s going to be a very comprehensive open discussion among ATDD enthusiasts representing diverse range of industries and organization across central Ohio region.

Come prepared with all the questions you have and answers to some of the above questions. Bring someone with you who might make this discussion even more interesting!