Mobile Apps and Agile Project Management – PMI Ireland Event

In May, I did a talk for the Ireland Chapter of the Project Management Institute (being a PMP, I’m a member of it). The evening was split into two sections:

  • the first talk was about mobile apps development, and why project management principles matter.
  • The second half, a talk by Fran O’Hara, was about Agile and Scrum, focussing on how requirements are managed, how estimation and planning are performed.

In essence, my key messages regarding mobile apps and Project Management were:

  • the gold rush for mobile apps is over – meaning if you’re publishing a mobile app on the Apple App Store or Google Play, you are competing with a huge number of established players and a lot of high-quality apps. That means the chances of making a pile of money with low-budget productions are very slim (but there are exceptions of course, such as Tiny Wings in the casual gaming sector). Having an experienced team on board is essential (for areas covering analysis, technical development, testing, marketing & sales)!
  • I think a mobile app project is NOT different from a lot of other IT projects – therefore PM skills are essential to ensure successful delivery. Because the industry is maturing (larger corporations entering the space), a huge opportunity lies ahead for the PM community. Agile development principles (with focus on requirements driven and iterative approach) are key in the mobile app space.
  • Mobile apps in the Enterprise world are taking the mobile app industry to the next level. I gave a number of examples of multinationals and their activities in this area.

The event was fully booked and the talks were well received – we had a set of very interesting questions from the audience. It seems that there is a tremendous interest from Project Managers when it comes to Agile and Mobile Apps.

You can find details about the PMI event here http://www.pmi-ireland.org/event-calendar/event-view along with my presentation slides on slideshare:

Our Special Olympics iPhone App in the Exicon Olympics Report

We are thrilled that our Special Olympics iPhone app was mentioned in the Exicon Olympics Report “Go for Gold with Mobile Apps”.

Along with mobile apps from NBC, CTV, Coca-Cola, Heineken and Barclay Card, our Special Olympics app (download from the App Store) was reviewed as an example how to stay in touch with athletes at the Athens Special Olympics event:

“The aim was to create a positive association with the team & athletes by integrating athletes profiles, live results, photo galleries, news archives, blog feeds and a donation link, all fed into the app by the athletes.” – Roland Gropmair, mApps.ie

Big thanks to Bernie O’Driscoll (www.specialolympics.ie), Alan Haverty (www.outlier.ie), Cian Pas (www.creamgraphics.ie) for making this project reality!

Below two screenshots – download the full report here directly from the Exicon website.

Three Reasons why Adopting MVC makes sense even for a small cocos2d iPad Game

The Model-View-Controller (MVC) design pattern is engrained into many frameworks, and of course also into Cocoa Touch. To put it into a nutshell, MVC separates the management of data (the model) and the display (the viewer), linking these components by a controller. This promotes flexible design and reusability. In other words, if the process where the data comes from changes, the components that display it to the user and allow user interaction won’t have to change.

When I started my little FlipMemory project, a memory game for the iPad, the first release early 2010 was based on UIKit. For the second release in early 2011, I did a complete rewrite, based on the excellent cocos2d-iphone toolkit  (which of course also works on the iPad).

In all the (simple) sample projects I have worked through back then when I learned cocos2d, the code that manages the model was mingled with the view components. So my first approach was to do it alike, and not bother about adopting MVC.

But I was wrong, and therefore had to redesign FlipMemory, and here is why.

1. MVC makes it easier to test your Model – a core component in any app

When I rewrote FlipMemory in cocos2d, I started by creating a class that manages the memory card logic: A deck of matching cards, responding to events like ‘user turned around a card’ , ‘check if cards match’ and ‘reshuffle the opponent’s cards in multiplayer mode’.

[sourcecode language=”css”]
enum TurnResult {
turnedFirstCardOfPair,
foundMatchingCard,
foundNonmatchingCard,
cardAlreadyTurned,
cardAlreadyRemovedAtIndex,
indexBeyondRange
};

@protocol GameModelDelegate
-(void)timerIncrementedByASecond;
-(void)counterForSolvedCardsChanged;
-(void)turnCardToFront:(int)index;
-(void)turnCardToBack:(int)index;
-(void)removeMatchingCards:(int)index1 index2:(int)index2;
@end

@interface GameModel : NSObject {
NSMutableArray *cards;
int indexOfFirstCardOfTurnedPair;
int indexOfSecondCardOfTurnedPair;
int pairsToSolve;
id delegate;
}

-(id)initWithMaxIndex:(int)maxIndex delegate:(id)delegate;
-(enumTurnResult)turnCard:(int)index;
-(int)valueAtIndex:(int)index;
-(BOOL)isCardTurnedAtIndex:(int) index;
-(BOOL)isCardEmptyAtIndex:(int)index;
-(int)numberOfCards;
-(int)pairsToSolve;
@end

[/sourcecode]

I wrapped this game model into a very simple view controller, that consisted of old-style printf and scanf statements. That way, I could play a memory game in the Xcode console   :)

[sourcecode language=”css”]
X X X X X X X X

–> 1
X 2 X X X X X X

–> 5
X 2 X X X 1 X X
[/sourcecode]

and so on, you get the idea.

2. MVC allowed me to add two player functionality to FlipMemory

When it was time to add multi player functionality, I created two instances of the model class. That was it.

Well no, there was a lot more code to it of course… But without having one class that manages the game logic, I think it would have been very hard to add multi-player.

Here’s the definition of the Game class:

[sourcecode language=”css”]
@interface Game : NSObject {
BOOL gameRunning;
NSUInteger numberOfPlayers;
enumGameMode gameMode;
NSMutableArray *players;
NSMutableArray *models;
}
[/sourcecode]

and here how it creates the model for each player. While that can certainly be cleaned up, I guess it demonstrates the point I want to make:

[sourcecode language=”css”]
for (int player=0; player<numberOfPlayers; player++) {
Player *player = [[Playeralloc] initWithGameMode:theGameMode difficulty:difficulty];
[players addObject:player];
[player release];

GameModel *model = [[GameModelalloc] initWithNumberOfPairs:numberOfPairs maxValue:[BoardLayernumberOfImagesForTheme:theme] gameMode:gameMode];
[models addObject:model];
[model release];
}
[/sourcecode]

3. MVC makes it easier to add new features to your game, because you break down your code into smaller pieces

As Robert C. Martin said over and over again in “Clean Code – A Handbook of Agile Software Craftsmanship”  you need to keep you classes small, otherwise you won’t be able to maintain your code. While I cannot claim that each class in FlipMemory only does one thing (yet), I certainly see the value of that principle.

Whenever I get time, I’m working on small enhancements of FlipMemory (e.g. Game Center integration, level design) – because that’s my testing ground.

Blogs and Resources related to mobile app iOS development

There’s a number of very useful resources out there on the web that will help you when you’re developing mobile apps on iOS.

I’m reading a number of blogs on a regular basis, here’s a list:

Other useful sites are:

Mobile Applications made in Dublin