Conference Fun: Blackberry Developer Days

Having just returned from what was an eye opening Blackberry Developer Days conference in Johannesburg, I thought I’d write a few of my thoughts on it, and Blackberry itself (or rather the direction I see it going).

Firstly, thanks to the presenters, they showed both a good knowledge as well as a passion for the subject, both ingredients that kept me interested. Secondly let me state categorically that I am an Android Fanboy, love it, enjoy it, code it, and dare I say, worship it? Also, I’ve never touched or been close to developing anything for a Blackberry so this was something I went to with an open, yet somewhat skeptical, mind.

I’ve always thought of Blackberry as a device aimed at the corporate / business market, but after this conference I have to say I’m pleasantly surprised. Their consumer drive is impressive to say the least. In a nutshell with their 5.0 release of their OS, they’ve played a lot of catchup (to the other smart phone brands) of features they needed to add, and added some nifty things that make them really cool.

Here are some of the good things that stuck out for me:

  • The WebWorks Framework (widget building), particularly the ability to create an HTML / JavaScript app that can access phone functions directly – nice.
  • The Theme Studio, customize your own theme (even animated) for your Blackberry, cool idea.
  • Geolocation based services, not much to say here, pretty much on par with all the other manufacturers, although I think their model to handle loss of signal and use of best available service is better than others.
  • Changes to graphics, introduction of 3D OpenGL (think gaming) and an Animation API.
  • The ability and level to which you can integrate between applications on your device (both custom and built in), and outside via networking, was impressive, reminded me a lot of the android model, but different in many ways.
  • The Blackberry Alliance Program with cool incentives like loaner devices.
  • They actually showed us South African developers some love! With the ability to do paid apps and receive revenue it puts them ahead of Google (1/2 credit for the Google Africa conference next month, but give us paid apps already!), and WAY ahead of Apple (who I doubt even know we exist).

This is what was not so great for me:

  • Lack of support of the Eclipse plugin in Linux (Mac and Windows supported). Although there are workarounds but still… professing to be open and not supporting THE open source OS ?
  • The 70/30 cut on profits from sales of your app, seems a bit steep, but that’s just me.

All in all it was a good experience, an eye opener of sorts, I’ll definitely be getting into the Blackberry development arena.

One last thing I want to say is that, although Android is growing so rapidly and iPhone is, well, iPhone; here in South Africa Blackberry is still very much the leading brand (by far) in the bulk of the market (with their Blackberry Curve mostly). People don’t know “Android” and most don’t care to know “iPhone”, being priced way out of their pocket. Blackberry is what people use for a smart phone here, and it’s pretty dumb not to be targeting that market, if you’re serious about mobile development that is.

Next Up: Google Africa Conference, let’s see what THEY have to say…

Disclaimer: I am not nor have I ever been a Blackberry Developer, I speak here purely from personal experience so feel free to correct me if I have been inaccurate in any way

My first of many Android apps

In my spare time I do what I love (how sad, I should do what I love all the time), and what I love is coding, and the android platform…

I’ve created my first android application available here: http://torrentfunnel.ricktonoli.com, read up on it at the site. If anyone wants to give it a whirl I’d appreciate feedback. It’s still in beta, so no promises…

I’m not a child…

Dear Manager,

I am one of your developers, when you hired me you treated me with respect, you asked me about my skills and abilities and (I assume) hired me because of these. Please could you explain to me why, now, the respect is gone and I’m being treated like a mentally deficient child?

If you want me continue adding value please consider the following:

  1. I am not 6 years old, stop treating me like a child.
  2. Using fear, intimidation and sarcasm to control me does not work, the more you try the more I will resist. Try a little more collaboration and a little less intimidation…
  3. If you would like me to tell the truth, don’t force me to lie by shouting at me every time I tell you the truth.
  4. Stop rejecting reality and inserting your own version of it, this is a sign of insanity.
  5. If you force me into a corner, I will lie to get out (see point 3).
  6. If you want me to be responsible, give me ownership of the problem AND the solution and stop telling me what to do by when.
  7. Stop treating me like the “bad guy” and take responsibility for your bad management decisions.
  8. I’m not giving my opinion to irritate you, I’m giving it in an attempt to add value. After all, you hired me for my expertise, right?
  9. Respect that I am a person, not a robot or a number, and that I have a life outside of work.

regards,

A. Developer

Stay away…

Yesterday I found out that my dad was robbed, not in some dark ally or in the dead of night, but in broad daylight, walking through the entrance of a busy shopping mall in Rustenburg, with (useless) “mall guards” and numerous shoppers within meters of him. Thankfully he was not harmed, this time.

This is a warning to all those tourists coming to this country…DON’T. Stay away, make other plans. A game of soccer is not worth your life, or the life of a loved one.

If you insist on coming, please be aware of what you’re walking in to. This is not a “rainbow” nation of friendly people, not a place where life is valued and people feel safe.

This is a place where criminals beat a 1 year old child because it “was making too much noise”, where children are kidnapped and dismembered for some sick ritual need, where small girls are stolen from their mothers arms and sold into slavery, where old people are brutally beaten and murdered in the most grotesque ways, where a person is shot for their cellphone and R50 cash, where people are robbed in broad daylight, where the criminals are free and innocent people lock themselves behind burglar proofing and electric fencing. This is Africa…be prepared.

Trust…

Forcing impossible deadlines, ordering people to be at work during certain hours, denying leave, bringing in consultants and hinting at using them as a yardstick for productivity… I often wonder what makes people resort to these tactics and if they know the net effect of them? Decreased morale, lowered productivity, lack of any desire to do anything, “stick it to the manager” mentality, tiredness, increased stress, fear of job loss…I can go on but you get the point.

What brings this on? Not entirely sure but I can speculate…people react differently to varying degrees of stress and who can say what goes through someones mind when faced with pressure from above from someone who does not fully understand the given situation and lacks (or has incorrect) facts. I would say though, having worked with various managers under varying degrees of stress, that this is indeed the role of middle management, to absorb, explain, clarify and defend the team in which they trust, assuming the trust relationship is there.

Trust, that’s perhaps the key factor here and I think the core of where these decisions come from. Trust is the difference between saying “all leave has been denied until project X is done” and “as a team you guys decide whether you can absorb the impact of this leave but whatever you decide, I will back you”. Trust is not telling your team “you will be at work between the following hours…” but rather saying “there’s an incorrect perception linking the current level of productivity to peoples hours of work, how would you guys think we should approach correcting this perception?”.

Patrick Lencioni, in his book “Overcoming the Five Dysfunctions of a Team”, lists Trust as the foundation of any good team:

“…members of great teams trust one another on a fundamental, emotional level, and they are comfortable being vulnerable with each other about their weaknesses, mistakes, fears and behaviors…”

“Team”, in this case, includes everyone trying to achieve a given goal…everyone. Often I see management reeling under the pressure from above and, instead of approaching their team, bringing them into their “world of pain” and trying to collaboratively find a solution, they will resort to giving orders and clamping down. Inevitably though, the harder they squeeze, the more they lose control, forcing them to squeeze harder…a vicious circle from where the only thing that results is broken trust, something that’s almost impossible to fix.

Change is good

I’m often amazed at the number of dogmatic “prophets” out there when it comes to the latest fad’s of agile development. I myself am about getting productive and like to take the best of ALL worlds; change is not only inevitable but necessary, even changing of a process BUT, only if the change leads to improvement! I believe a process of continual introspection and change by a team, combined with a good way of measuring the effect of that change,  is essential for good team performance.

That in mind we made the following changes to the way we practice scrum:

  1. We added a default story to cover recovering technical debt (or refactoring if you will) in that story. Essentially we assign a “story point cap” to this story (say 5 points) that’s based on our current velocity and duration of sprint. We then assign “technical debt recovery” tasks to this story until the team feels there are enough tasks to fill the story points. I know, sounds like the wagon pushing the horse but it’s something we’re trying that other teams have used effectively.
  2. We’ve started estimating (wait for it…) HOURS on tasks. Stories are still broken into story points but the tasks are estimated in “hour blocks” (2, 4, 8, 16) as they are put up. The purpose of this is to act as a type of “sanity check” for story point estimation. An added benefit I found was that the team members seemed to think a lot more about a task when they had to assign time to it.
  3. We’ve started using a round table instead of the tradition square meeting tables. I found this very effective in encouraging participation and collaboration.
  4. Story point estimation was done using a technique I learned on training that speeds up the estimation incredibly (works well with lots of stories). This is how it works (well, how we did it anyway):
    1. All the stories are explained to the team and placed in a pile on the table.
    2. A wall/board is divided into sections, each representing a story amount (we used 1, 3, 5, 8, 13, 20, 40, 100).
    3. Each team member takes a pile of cards and sticks them in the column(s) they believe it belongs, no-one talks or interacts other than with the product owner to understand the story further.
    4. If a team member disagrees with where a card is, he/she simply moves it to where he believes it SHOULD be.
    5. This carries on until all the tasks are done. Remember, the key is NO COMMUNICATION between team members during this process, this has the effect of forcing people to think about why someone made a decision to place something in a particular column, or why they’re moving it.
  5. We’ve started experimenting with TDD and Paired Programming, which seems to be going well.

One additional thing I’m toying with is moving to a more Kanban based board, the team has problems with taking on too much work and I think creating a way of limiting the pulling of work will work.

Finally on how to measure if these changes are effective, well, to be honest I’m not entirely sure. I think the best way is simply to see if the team becomes better at actually doing what they predict they can do while maintaining a sustainable pace and having fun; other than that I guess we wait and see…

I’d be interested to know what kind of changes you brought about in your team and the effect of them (both good and bad), let me know…

Implementing an Effective Build Dashboard (for Hudson) (Part 3)

Not really part of the dashboard configuration but more of a cool thing I thought I’d share the underlying layers (hardware, OS etc) behind our monitor.

I decided to go with full portability and hands free start-up, I did this as follows:

  1. Installed Puppy Linux on a 2gb USB stick.
  2. Installed Firefox 3.x (needed for the Autohide extension).
  3. Installed Autohide extension (auto hides parts of Firefox and forces full screen on start-up).
  4. Found an old derelict PC and plugged it in, started up, configured the video display (once off on start-up).
  5. Configured the build monitor as per previous posts.
  6. Changed the start-up of Puppy Linux to auto start Firefox.

And there you go:

Build monitor, on a steeeck!
Build monitor, on a stick.

Implementing an Effective Build Dashboard (for Hudson) (Part 2)

This is a follow on of my previous post and details how to implement the code available in the original post by Fabio Parera here, together with the modifications I made for our environment. I suggest you look at the original post first though to understand the extra stuff that I did not implement (I removed “expected duration” and “pinging servers”).

  • To start, modify Hudson to generate a code coverage percentage file, in our environment (.NET) we used NCover and NUnit but adapting your tools to do the same shouldn’t be a problem, the concept is simple:
  1. Generate the coverage percentage file(s). See this post on setting up NCover and Nunit in Hudson
  2. Extract the percentage from the file(s) and put into a single file in the root of your project. This is now accessible as http://<ci-server>/jobs/<project>/<coverage-percentage-file> after every build.

  • You need to install the Greasemonkey Add-on for Firefox for the script to work, do that now. After you’ve installed, you need to modify Firefox’s config and set greasemonkey.fileIsGreaseable to true:
    • Open up Firefox and open up the page about:config (type it in the link box).
    • Find the greasemonkey.fileIsGreaseable setting and, if it’s not set to true, double click it to set it.
  • Now extract the contents of this file to a working folder. Please note that this code is neither pretty nor up to date but is completely functional, feel free to modify at will.
  • Edit build-dashboard-radiator.html. Each project is defined in a section like this:

Create a section like this for each project you want to monitor, changing the href to your projects base directory.

  • (Optional) Edit build-dashboard-radiator.css and modify the style-sheet so it’s suitable for your display, the sizes for the fonts are located towards the end of the script. The current sizes are great for a 40″ screen.
  • Edit build-dashboard-radiator.user.js
    • Change coverage_minimum to whatever value you want, anything more than this will be displayed as green, less, red.
    • Find the section that looks like this:

you need to link the names of commiters to your project(s) to pictures, do this here. The names are what’s extracted from the version control system you use and should be set by every team member before checking code in. To find out what it is in Hudson, find a build and have a look at the json object generated from it, you can find it here (look for the value of “fullName”):

http://<server>/hudson/job/<project>/lastBuild/api/json

Note: This is, in fact, the source for all the information in the script, if you’re thinking of extending the monitor this is the first place to look for information on your build. Another place to look would be

http://<server>/hudson/job/<project>/api/json

which lists information related to the project as a whole (not build specific). Also, you can substiture lastbuild in the previous link for any build number.

  • Next, after you’ve saved all your changes, open Firefox and load the html file. Drag and drop the js file into the browser and this should now install if you have Greasemonkey installed correctly

You’ll know it’s installed correctly if you see this in your status bar

That should be it, hit refresh on your browser and bask in a cool dashboard monitor.

I’d like to thank the original poster (Fabio Parera), and of course all the people he thanks, for linking this awesome monitor, it was exactly what I was looking for and I hope it turns out that way for you too. Let me know how it goes and if you can think of any way of improving it.