Click here to Skip to main content
15,886,806 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
See more:
Hi,

Sorry this is a bit of an abstract question.

Our development team is growing and I've been tasked with ensuring effective processes are in place for managing them.

We currently use an unstructured prototyping methodology so I'm proposing we structure this with an Agile methodology such as Scrum.

There's an emphasis on improving quality as often incompatibilities appear in our product which aren't identified until implemented in a production environment.

We've developed a SOA solution with multiple applications/services each consuming one or more services.

I've configured TFS with an Agile template, set up continuous integration and automated unit testing. Published branching and merging policies. Defined coding standards using the SOLID principles. But what we don't have yet are the unit tests.

I'm trying to develop an understanding of whether a horizontal or vertical approach to development or perhaps a hybrid approach would be beneficial to enforcing a disciplined regime of unit testing, especially in an environment where there will be resistance from existing developers?

Any comments, recommendations or links to relevant articles would be much appreciated.
Posted

1 solution

This is a very big and complex problem, so I can give a few notes.

First, I don't think the application of a vertical or horizontal slicing does not effect the unit testing so much. Why? A unit is a unit. It is not a whole layer or a vertical "story", but a smaller unit of development and isolation. Normally, the author of the unit develops the unit test set for it, but it's very important that this test could be reviewed and updated by others: one person, especially the original authors often have some vision they are preoccupied with, and this limited vision often prevent then from seeing problems or concerns apparent to some people of fresh glance.

Now, about the vertical vs. horizontal splicing. There is a good number of Agile absolutists who bring very strong arguments in favor of vertical slicing, at least in their opinion. See for example:
http://www.cincomsmalltalk.com/userblogs/buck/blogView?entry=3311184808[^],
http://agilewarrior.wordpress.com/2009/07/27/horizontal-vs-vertical-slicing/[^].

Here is the thing: I saw so many books and articles on the software development methods, some are written by people of big well-known names; and I never saw one which would make me too enthusiastic about arming myself with a method's techniques. Don't get me wrong: I am not against the method and not against methodology. It's just everything looks to me not like a real science but rather like some blah-blahology, so to speak. At the same time, some methods and books reflect real experience, positive or negative. So, I would say I would advise some hybrid approaches, hard to say how exactly. It's better to say, not that they should be hybrid, they should be project-driven, that is, the method should be built and adjusted in place of work, depending on many different factors: major project goals, resources, available code and technologies, and, very importantly, people involved.

Speaking of the "unbreakable" arguments in favor of strong vertical approach, I can always point out some serious drawbacks. The layer is shaped by the whole team? But then, who would be responsible for its integrity, elegance, unified architecture and design? Development of a layer is performed incrementally and constantly? This is good, but who will prevent the erosion of it? The layer will be free from all the bells and whistles, that is, redundant features? But how the new features can be implemented? One by one? Then you risk to fall into ad-hoc style, effectively preventing reuse of the code or stimulating erosion of commonly used utilities or algorithms. So, my conclusion is: some hybrid approach is the most prudent, but the location and degree of hybridization should be envisioned based on the project specifics and adjusted interactively during development. Isn't this the same interactive approach so valued by the strong Agile proponents? I think I was using Agile elements well before the term "Agile development" was coined, but the method was ever changing. And never perfect.

Now, I want to touch the role of the project leader. Even though Agile ideas promote distribution of the decision making among the team members; and this is the good trend, the process needs someone to uphold proper architecture, requirements to the code and development discipline, and this is not just keeping up with the formal procedures, otherwise the erosion of the project an unmanageable entropy build-up is unavoidable. Whatever method you invent, it has to be one person of a very small group of people; in my opinion, no more them two or three. Such person or a group should be able envision the future of the project and development process and foresee some of the fallacies. It takes a very cunning vision and experience. Such people cannot foresee everything, but they can do mistakes. The best leadership is not when the leaders make no mistake and keep others out of mistakes; this looks nearly impossible; no, the good leadership is when the mistakes are finally fixed, but the fixes are not so expensive to ruin the project.

And finally, I want to mention such a painful problem as the problem of a non-technical project managers (and sometimes even "architects"). I mean, non-technical or not doing enough work as a software developer. This is something which often happens, and this is a curse of all the software industry. The mechanism of it is quite understandable: people don't want to waste the time of talented developers for the management, so some worse or mediocre developers who just are too uncomfortable with creative development and technical decision making are "promoted" to the management. As a result, everyone suffers; nobody respect such people and resist, such managers block good decisions and promote lousy ones, create tension and also suffer from all of it. It goes even worse when such people gets too much initiative; it often creates disaster. I think many developers are well familiar with such settings but usually don't speak about it. It's really important that the knowledgeable people raise their voice to prevent such situations. This is not easy.

OK, why am I writing and writing? A whole essay… Let me round up here.

Thank you for reading,
—SA
 
Share this answer
 
v7
Comments
Stephen Hewison 6-Jun-12 15:03pm    
Hi, thank you for your thoughts on the subject. It made for interesting reading. I gave you 5 for it.
Sergey Alexandrovich Kryukov 6-Jun-12 18:28pm    
You are welcome.
Again, it would be nice to accept the answer formally (green button) -- thanks.
--SA
VJ Reddy 6-Jun-12 23:55pm    
Nice explanation. 5!
Sergey Alexandrovich Kryukov 7-Jun-12 13:14pm    
Thank you, VJ.
--SA
RaisKazi 8-Jun-12 23:11pm    
My 5+

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900