jump to navigation

and they all rolled over and one fell out… 27 June 2008

Posted by Tracey in Uncategorized.
Tags: , , ,
add a comment

a group of youthnetters recently spent a saturday moving desks & equipment around in a complete reorganisation of our side of the office. this was partly to fit in some extra desks (with volunteers/interns involved in most areas of our work the organisation is once again almost bursting at the seams) but also to make it easier for some people/teams to work together. most of the v-base 3 team is now located in one double row of desks. it’s great for me as i no longer have an obstacle course of people and technology between me and the client application developers. but until we get some straight desks (i.e. without curved returns on the sides), pair-programming will continue to be very cosy ;)

Baz Sofia & Martin

Agile development experiences 26 June 2008

Posted by spacebaboon in agile, do-it, technical, v-base.
Tags: , , , , , , , , ,
add a comment

I’ve been a developer at YouthNet for over 6 years now, and have written much of the code behind the do-it.org.uk website, as well as our other sites, TheSite.org and youthnet.org.

One of the challenges and opportunities of V-Base 3 is greatly improving and expanding how the V-Base client communicates and interacts with the central database and website. We can send much more data in both directions to make V-Base more interactive with the website and volunteers’ profiles, to allow data sharing, and much more.

So I joined the V-Base 3 team a couple of months ago, to work on this area, and it’s been a very interesting time so far!

One of the things about working on one website for a long time is that the work tends to be small and bitty: change the look and feel of a section, add some new functionality to a profile page, that kind of thing. They normally last a couple of weeks, and will just be me working on it, or one other developer at most.

So to work on a very long term project – by the December release it’ll have been in full time development for over 2 years, and the team has grown to 9 people now. This is a first on anything like this scale for YouthNet, and the team have adopted the Agile methodology, a very modern approach to software development.

So, how does Agile compare to what I’ve done before? Is it the revolutionary improvement some say, or more a fashion statement, as others comment?

Things I like:

communication is important anywhere in development, and more so the bigger the team size and project complexity. This is important in Agile, we make a point of a short meeting every day where everyone says what they’ve done, what they are doing and any problems they’re having. I find this really useful, as I know what everyone else is doing, how their progress is going, and lets everyone else offer ideas to the others’ problems.

we’re using modern web-based project management, code building and information sharing tools:

JIRA for project management, work planning and bug tracking.

Confluence as a Wiki, to store and share all the details of our work. This is such an improvement on a local area network full of MS Word documents!

TeamCity for continuous integration, a central place the code is built and tested, great when several developers are working on the same code base.

Good and flexible working conditions. We’re all hard working, the daily standups mean you can’t get away with sitting in a corner and doing nothing but play Scrabulous for weeks. But one of the Agile tenets is that you work your set hours, and not a minute more. I’ve worked in places where the week or two before a big release, half the team is still there at 10pm every night. A happy, relaxed team is going to work better. We’re also using a VPN and Remote Desktop and IRC to be able to work from home occasionally.

Flat structure, design by meritocracy. We don’t have a complex structure of bosses dictating your every move. Whoever knows something the best can take responsibility and do it.

Iterative development. Rather than working out every detail at the start, building a huge timeline and enbarking on months of coding, the work is split out into short stretches, usually a week or two, where you decide which chunks of work need doing, and then code those. at the end of the iteration, you have a review, to see how it went, and what could be done better next time. while this means more deadlines, they’re not as deadly as when you’ve been at it for 6 months and still have half to do.

Things I don’t like:

There’s a lack of planning and design work at the start, compared to the development I’m used to. The attitude seems to be that you just go and do something, and if it’s wrong, then you refactor it based on the knowledge you gained from it, so your next effort will be closer to what’s needed. While this is a nice way to work, it’s not as effective as taking much more time at the start and getting it right first time, and a lot of time is wasted.

It’s very hard to estimate the time scale of a complex project. When you lay out everything at the start, and work out exactly what has to happen, then you can get an idea of how long it’ll take. but if you just iterate until it’s done, any estimate more than a year ahead seems a stab in the dark. Again, as a developer, it’s nice to work in this way, but it must drive management crazy!

Conclusions:

Despite its name, Agile is much stricter and has more rules than how I’ve been working here previously. You must have stand up meetings every day, you must log all your user stories and progress in JIRA, you must make sure the build compiles with every commit, etc. But this is actually a good thing, they all help, especially in a large team on a long project.

It’s not suitable everywhere, if I go back to the bitty, single-developer work after this, Agile wouldn’t be suitable – the rules and practices would be an unnecessary overhead.

Agile isn’t really anything new, and didn’t come out of nowhere. It’s a collection of sensible and practical ideas that software developers have figured out through experience over the last few decades, brought together and given a name – rebranded, if you like. And as such, it’s very easy to pick up and use. Some of the ideas and technologies I’ve used before, and some are new to me, but they really work well together when working on a big project like V-Base 3. If I work on any large projects after this, I’ll fight to use Agile.

So I’m definitely a fan, if not quite a rabid, flag-waving convert :)

V-Base 3 joined by a new member 10 June 2008

Posted by Camille in agile, do-it, v-base.
Tags: , ,
add a comment

You might have read Olivier’s post on the joy of recruiting for a new developer.

Sofia joined and not long after her we had another addition to the team. Although the recruitment process was less difficult, we had to define a list of criteria and go through loads of websites. After eliminating unsuccessful candidates, we eventually set our eyes on this particular …. White Board! … aka The Tasks Board.

Task Board

The Tasks Board has been part of the team for a couple of iterations now and its role is to offer an overview of the tasks to be undertaken during the iteration and to follow our progress as we’re going through. How does it work?

We divide the board in 5 columns and although cards in column 1 won’t move (so that we can identify in a glance the theme the iteration is going to focus on), the tasks cards will progress from columns 2 to 5.

  1. Story/Area : each user story / area of work we decide to commit to for this iteration
  2. Tasks/To do: each user story / area is broken down into all the tasks that need to be done in order for it to be completed. One card is written for each task.
  3. In progress: once a developer picks a task and starts to work on it, the task card is moved from “To do” to “In progress”
  4. Verify: once the task is completed by the developer it’s moved to “Verify” in order to be QA’d/ tested. If the test is satisfactory, it goes to the next column, Done, otherwise it goes back to “To do”
  5. Done: eventually, all the tasks that were in “To do” will end up in “Done” by the end of the iteration.

Tasks Board really is a part of the team as we have to roll it (I forgot to say that the Tasks Board is on wheels) from our main working area to the area we gather in for our daily Stand Up Meetings (SUMs). Occasionally one of us might be not being able to attend the SUM but Tasks Board is always there (annual leave: 0, sicky: 0)

So, what are the benefits of having Task Board on board ???

  • Everybody from Developers, to Product Owner, QA person or Tracker can have an idea of what people are talking about when they say what they are doing during the SUM,
  • We are working in a more transparent environment as everybody in the office can see what we are up to for an iteration and how we are progressing,
  • And most of all there is a huge sense of satisfaction when all (most of) the cards are progressing through the columns to ends up in the “Done” one by the end of the iteration.

Finally, Tasks Board is very versatile and that’s a good thing as you can find one that fits your needs. It can even be an opportunity for some DIY-team building.

For more examples of Tasks Board: http://www.informativeworkspace.org/walls.php

YARI (Yet another refactoring interation) 4 June 2008

Posted by martin in Uncategorized.
Tags: , , , , , ,
1 comment so far

We have just started yet another refactoring iteration. The last one for a wee while, I’ve been told. It’s nice to have had the chance to take a step back and change some of the things that can come back and bite you later. In the previous refactoring iteration we concentrated on changing the way the database was structured and started with a schema that barely fit on an A3 page even with the smallest possible font and ended the iteration with a schema that shows quite clearly on an A4 sheet. The same functionality with less complexity. Success!

So this iteration we are aiming at the domain and the gui code for one of the main areas of the application. We will be shifting the gui components from autonomous views (gasp) to a version of the presentation model called Model/View/ViewModel . This is a pattern that is fairly simple to implement with WPF’s excellent data binding model. The main reason for implementing this model is the fact that it makes it easier to test gui components in code but as it’s similar to the MVC model it also has other benefits. We have all successfully used this pattern to implement and test the latest gui components that we have written in recent iterations and this iteration we will be going back and converting the older code over to this model so that we can properly test them. Rise ohh rise almighty coverage value…

At the same time we will be adding an entity translation service in to convert from the nHibernate data classes to a true domain level entity for volunteers. This will allow us to get around a few problems we have with our usage of nHibernate. We have always generated the data classes from the the mapping files. This is setup as part of the build process and works very well. We have a modified version of the nHibernate hbm2cs tool that generates partial classes so that we can extend the generated classes without having to worry about custom code being overwritten the next time you run a build. This unfortunately only goes so far. We still needed a way of adding in business rules and validation rules to the properties of these classes in the generated code. We could have beaten the code generator with a stick until it allowed us to implement these features in the nHibernate classes but I just didn’t like that idea. It seemed to me that an entity translation service and a new domain level class would be a more effective solution for our rules problem and also for better separation of the application layer from the data layer. It also means all those strange things you have to do to get your data stored in a database can be hidden in the entity translation service which in turn can be hidden behind the volunteer service layer. Then you can have an application layer class that works the way you would like it to work and don’t have to let the database schema and nHibernate dictate the way your application is coded. Maybe I’m just a control freak but that sounds good to me.