(and if you know how to convert this SWF into an FLV file please let us know! The usual ffmpeg magic has failed us!)
Yesterday was a good day for Web Services as we not only launched the first of our 'new external website' projects but we've released the first application built using Scrum.
The publishing system for our news articles/press releases has been replaced with a new application built with WordPress. The decision as to why we chose WordPress has been well documented on our blog and wiki as has our adoption of Scrum but yesterday our users got to see what we've been working on and our colleagues in Corporate Communications got a new system to manage news articles.
We've had an internal article published (on the new system) which explains some of the background to the project and we plan to launch a video (showing the inside of the app within the next few days).
* Thanks to @lovelychaos for the title!
With apologies to Bassment Jaxx... Anyway. So we've been doing lots of WordPress development in preparation for the relaunch of our news system. One of the big reasons we picked WordPress was the plugin API and it's turned out to be a really good decision on that front.
Once I understood the basics of a plugin (thanks to Savin's 10 minute tutorial) - the architecture, how hooks work, how to render widgets - and accepting that it'd be easier to write code in plain old functions to get going initially instead of writing classes (gasp!) it took me a couple of days to write my first plugin.
After my first plugin, it took me a day to write my next plugin's first iteration. Working code in a day. All I had to do the next day was add one more feature. Then it took me another day to make it all jQuery-tastic.
Roll on writing more plugins in our next sprint!
In SCRUM there's an essential role that has to be fulfilled by someone who can't partake in the work tasks from a project. They are called the SCRUM Master.
That isn't to say that the SCRUM Master doesn't have tons of work to do. In fact, if they don't do their job properly, the "sprint" of tasks the team are to undertake isn't properly organised and hence affects their productivity.
So if you're not the SCRUM Master, surely you'd think that it's unfair as you're doing "actual" work rather than "mere" project management? Well no, in fact. The SCRUM Members (it's not an official term I don't think - I made it up. I'm imaginative like that) actually have it easier. Your entire focus is on your task at hand, nothing else, and that task should have been broken down into a working day-sized chunk but no more. You have nothing else to worry about, even when you get to a point that you can't do your work - that's for your SCRUM Master to do! They deal with impediments on your behalf you see
A recent example was when Phil had a pile of support queries to deal with which were stopping him from getting on with his project work. His SCRUM Master Andy Male took those tickets away from Phil and dealt with them, allowing Phil to get on with his tasks.
Essentially, it's the SCRUM Master's role to make it as easy as possible for you to get on with your work and from my observation that takes a lot of effort. With all that hassle taken out, working becomes much easier for the members.
A truly fair management style! The rest of Web Services seem to agree.
In the last couple of months we have started to use Scrum to manage our development projects. If you are within earshot of our office you will hear people using words like 'Sprint', 'Backlog', 'Velocity' and 'Impediment'. People have new titles, our clients are 'Product Owners', Phil and I have been 'Scrum Masters'. It's all quite exciting.
I've always felt uncomfortable with traditional project management but using an Agile project management methodology like Scrum eases all my concerns. It's fair to say that even if the waterfall method ever worked it's unlikely to be seen on the other side of this economic crisis, everyone needs to be more agile.
It's very easy to talk about our experience of Scrum as the process includes the 'sprint retrospective'. This has allowed us to look at how the last iteration of the project went and how effectively we are using Scrum to manage it. The Scrum Master takes responsibility for making improvements so that the next iteration is more productive.
The benefits we are seeing already are:
- The progress of the sprint is clearly shown through the use of a burndown chart
- The Product Owner has to tell us the priority of all the required features
- The team are committed to the sprint goal because they plan the work that is included in the sprint
- Any impediments to tasks are identified quickly at the Daily Meeting
- We are starting to understand how quickly we work (our velocity) and can therefore commit to realistic deadlines
We have started Scrum with relatively little pain, this is largely because of the enthusiasm everyone has shown. That being said it's interesting to see that often the reason cited for the failure of Scrum is that the team weren't rigorously following the process. We realise we haven't got this nailed yet so our expectations have been modified accordingly.
We need to learn more about things like estimation and how to start Scrum with clients who have never been closely involved with a development project. I'm looking forward to this as I think we are already more focused, productive and working more closely as a team.
I would be interested to know how other people are project managing or their experience of Scrum.
Hello and Happy New Year to you all!
As a followup to Kelvin's post on the topic, I thought I'd expand on some of the trials and tribulations we had adopting a new Java framework.
We've been developing all our most recent Java applications in Struts2. This has brought both tears and laughter but among the biggest problems we faced was that once we'd deployed a few of our apps to our live Tomcat server we realised that we couldn't deploy new a version without shutting down the entire instance, and therefore making all our other apps unavailable at the same time. Yikes!
It turned out that Spring, which we use for dependency injection, was holding onto a couple of our jar files even when we were undeploying the application. We'd seen this on some Windows development machines before but not on Linux or our Solaris deployment machines. This time however, the problem didn't occur at all under Windows, about half the time on Linux and 100% of the time on Solaris.
The way we'd dealt with this previously was to get the Windows-based developers to add
antiJARLocking="true" to a hard-coded Context in their server.xml which keeps the problem nice and localised.
That wouldn't work for our live servers since, as the documentation says, "applications that are outside the appBase for the Host will cause the application to be deleted on Tomcat shutdown." which means that for our configuration each time we stopped Tomcat would result in a number of applications being completely deleted!
We eventually solved the problem by writing application-specific META-INF/context.xml files that specified "
antiResourceLocking=true". This means that we can now deploy new versions of our applications and shut down our server without it deleting everything.
This was a reasonably pesky bug to track down since of course I couldn't use my local machine (where the bug didn't appear) or any of our standard development Tomcat instances since I could very easily be deleting people's applications every time I restarted the server. Lesson learnt though and we'll be paying more attention to the deployment configurations we use in future!
As colleagues are packing up and leaving to start the Christmas break I thought I would reflect on my first year with Web Services at Bath...
In many ways 2008 feels like the year we got our house in order. Two teams merged, one new head, continuing cycle of maintenance and support but plenty of new initiatives and plans.
We've evaluated how we work together, looked at what we can do better, where we have gaps and where we do really well.
Next year will be huge for us as we embark on the development of a new external website for the University. Plans are already underway and we're looking at significant changes with plenty of new initiatives coming to fruition. Alongside this we'll be working in a different way - using agile development methodologies to 'release early and often' - we have ambitious plans in store.
For now though I wanted to focus on 2008, to look at our achievements and reflect on our highs (and lows):
- Development of an e-Prospectus; due for launch in January 09 - connecting with our Student Record System and allowing data to be output to create the print prospectus providing a much richer experience for the end user but also improve business processes for the University
- Moved the majority of our Academic sites into the CMS
- Brought in a new Web Designer - good to have you on board Liam!
- Get Creative - it was fun, it brought the team together and it introduced us to FIKA
- Put together (and had accepted) proposals for a new external website
- Delivered Web Sessions to the University community
- Moved from dSpace repository to ePrints (with the Library)
- (Soft) launched a blogging platform
- Developed a tinyurl and QR code generating service (with e-Learning)
- Sadly one of our colleagues retired in April. Jacki played a key role in the website for many years and it is regrettable she is no longer in the team
- As a new team we still have some way to go to establish ourselves and our position within the University. We believe the development of the new site will help us strengthen our profile
- Maintenance and support of the current site has prevented us from moving on as quickly as we'd have hoped but we have new arrangements in place for 2009 to allievate this
From a personal perspective it has been a challenging yet rewarding year. I have great admiration for the team and am confident we can meet and exceed our own expectations in 2009.
To all readers of this blog, best wishes for a Merry Christmas and a Happy New Year.
As part of the latest sprint for the online prospectus, we looked at the possibility of reusing the Course Structure diagrams that are part of the printed brochure.
As the old adage goes, a picture paints a thousand words (and these pictures have words on them as well, so that's probably something like a million words worth of content in each graphic...), so it was essential we found a way to use them online.
One issue we had to resolve was the legibility of the text contained within the diagrams when they were downscaled to work within a web browser - of particular concern was the fact that all the text was faced in a Serif font. A few hours of research and playing with real world examples and we came to the following conclusion: in general, there is no difference with legibility between Serif and Sans Serif fonts - it comes down to the end user's familiarity with the font and therefore their ability to 'interpret' it. Alex Poole has published a really good essay on this matter.
To me, one of the most obvious advantages that Struts 2 gave us was the ability to unit test our controllers. Before now, our project architecture usually consisted of Hibernate+Servlets+JSTL JSPs. We were only unit testing our model and DAO. Though there are ways for us to unit test Servlets, it's not as straightforward as simply instantiating an action class and chucking a load of data at it. Servlets would require mocking up a request for example.
What I didn't like though, was keeping track of what parameters were being passed in and what objects were loaded in the action classes. I often fell foul of writing tests that passed and seeing errors in the web app. It was simply because the params or the objects loaded for the action classes in the tests didn't match up with the web app.
I think it's simply a reflection of some of our (my!) action classes. Not breaking the OGNL debugger console would have probably really helped. We really liked that console.
The eProspectus project was also my first opportunity to use Java Annotations. Support for annotations were provided by Spring, Hibernate's implementation of JPA and in Struts 2 action classes. Obviously, you're no longer writing XML for your most of your configs (just a couple). So there aren't masses of xml files that accompany each of your model classes for example - halving the number of files you'd have. The biggest win for me is being able to instantly see the config for a class in the code itself, rather than opening up a separate XMl file and switching between the two files. It just made life so much easier.
There was some pain in getting to grips with Struts 2, especially when we ignored the warnings in the docs that said certain features were experimental (I actually can't remember what that was now...) but we've built up a significant amount of new knowledge and I'm especially happy to have Spring and JPA under my belt.
Our team is the first-line support for the University's web needs. This means we get a lot of diverse requests landing in our bug tracker, RT, ever day. To help us share the load, we each deal with the support queue on rotating basis, as you can see in our schedule. We use the wiki rather than the University calendaring system just because it's quicker and easier to set up, enter events and edit them.
However, using the wiki means that there aren't any alarms or reminders.
So I took a few hours the other day and built a new module for our open-source Hungrybot which does the reminding.
The wiki calendar has an iCalendar export, so every two hours or so Hungrybot looks at that, works out who is on support today, checks the RSS feed of unassigned tickets and then lets the person on support know about them. In practice, it looks something like this (here you see I've prompted it to tell me about the new tickets):