Tuesday, October 26, 2010

The Agilists - Facebook Group

I have created a Facebook group (what is it?) named 'The Agilists'. As the name suggests, this forum is dedicated to foster collaboration among all agile practitioners (starting with those in my network).

If you are an agile practitioner or just interested to stay tuned, please feel free to join the group by clicking on the below link.
- Join 'The Agilists'

NOTE - Having a Facebook account is a prerequisite.

Monday, October 18, 2010

Frameworks enabling XP Engineering Practices on Android Platform

My recommended frameworks enabling engineering practices for android development:

  1. Test Driven development: Use android Test Instrumentation Framework (Android extension to JUnit framework)
  2. Automated Blackbox/Functional testing: Consider Robotium (Selenium for Android)
If you are interested, check these out (at your own risk)
  1. Automated Build: AndroidAnt
  2. (Alternate) Test Driven Development: Positron 
Hope this helps you in writing better Android Applications. 
Please feel free to drop a comment, if you come across any other framework enabling adoption of XP engineering practices on android development

Friday, October 8, 2010

Part II - Design patterns for scheduling a batch job in an Android Application

In my previous post we discussed usage of AlarmManager to schedule batch Jobs in Android Applications. In this post, we will dig dipper into design patterns specific to scheduled jobs executing resource intensive operations.

Any process having a Broadcast receiver object, is treated as foreground process and get's priority by Android Runtime. Consider a situation where you have a resource intensive process scheduled as a batch job. Let's say, the user has been playing a rich UI game (with significant frame changes/sec) when AlarmManager triggers your resource intensive job via the Broadcast Notification. Since BroadcastReceiver object gets priority in the order of execution, the user may experience slowness / lag in the application (i.e. the game in this case) running on the UI.

In order to circumvent this problem, it's recommended to design your batch job as a service within your application. Use AlarmManager to trigger the notification and let the BroadcastReciever start (or Bind to) the service to execute your job in the background. In this way, the user would not experience any impact on the application running on the UI. As with other components, don't forget to register the Service in the Manifest.

Sample code for registering a service in the AndroidManifest.xml

 
  
 


Refining further, one last scenario to be considered. What happens if your phone is already in a sleep-mode when the scheduled job gets triggered. Incidentally, you can set the 'type' parameter in the AlarmManager to wake-up the phone while Broadcast is being triggered. The Phone will automatically remain awake as long as the BroadcastReceiver is executing. However once the BroadcastReceiver object starts your service and completes it's scope, we run into the risk of the phone again going to sleep mode, there by stopping your (long running) background job abruptly.

To avoid such unpleasant situation, I recommend to obtain a Wake-Lock from PowerManager system service. Release the Wake-Lock after your background process completes successfully. This way you would ensure that your background process gets all due attention from the Android device.

Sample code for a service implementing a Wake-Lock
public class ScheduledPostService extends Service {

 @Override
 public IBinder onBind(Intent arg0) {
  return null;
 }
 
 @Override
 public void onCreate() {
  // initialize the scheduleTimer
  Log.d(Const.TAG, "Scheduled Post Service created");
 }
 
 @Override
 public void onStart(Intent intent, int startId) {
  
  // get a PowerLock
  // Retain the wake lock till this process completes
    
  PowerManager pm = (PowerManager) getSystemService(getApplicationContext().POWER_SERVICE);
  PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "SMSPost Tag");
  
  // Acquire lock
  wl.acquire();
  
  // perform your operation
  
  // Release lock
  wl.release();
 
 }
 
 @Override
 public void onDestroy() {
  super.onDestroy();
  Log.d(Const.TAG, "Scheduled Post Service destroyed"); 
 }
}

Don't forget to update the Android Manifest, giving permission to the application for using the WakeLock


Hope this has been helpful. Please feel free to share your experiences.

Thursday, October 7, 2010

Design patterns for scheduling a batch job in an Android Application

In this post, I will discuss design patterns for scheduling periodic jobs in an Android Native Applications. For illustration, i will be referring to sample code from my SMSPost project.


Let's start by discussing how to trigger a job at a predefined time? For many developers, Android Services becomes the default choice. However scheduling jobs through Services is not an optimal solution. Here is why
  • Running a service in the background all the time is a resource drain
  • There is a risk that Android may terminate the service in case of shortage in RAM (Refer to Android process and lifecycle)
Thankfully Android provides APIs to tap into Android system services. The AlarmManager System Service proves handy in this case. For scheduling your job, simply tap into the AlarmManager and schedule a Broadcast Notification event at the desired time. You have flexibility to schedule any date/ time or set fixed intervals for initiating the Broadcast notification. Your application should provision for receiving these asynchronous Broadcasts and perform desired operations.




Sample code for setting a Broadcast using AlarmManager 
try {
     Long firstTime = SystemClock.elapsedRealtime();
     Intent intent  = new Intent(this, AlarmReceiver.class);
     intent.putExtra("alarm_message", "Alarm Scheduled!");
     PendingIntent sender = PendingIntent.getBroadcast(this, Const.url_REQUEST_CODE, intent, 0);

     AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
     am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 60*1000, sender); // set your own frequency
} catch (Exception e) {
     Log.e(Const.TAG, "ERROR IN CODE:"+e.toString());
}


Sample code for Receiving the Broadcast Notification
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
 // TODO Auto-generated method stub
  
 try {
      // your code for scheduled job goes here        
     } catch (Exception e) {
      Log.e(Const.TAG, "ERROR IN CODE:"+e.toString());

     } 
}

Up Next: We would explore design patterns further in specific cases where your scheduled job is expected to execute some heavy resource intensive operations 

Wednesday, October 6, 2010

How to conduct effective Sprint Reviews

Thinking out loud on how to conduct an effective sprint review. The points below are written keeping project teams in mind.

Structuring the Sprint Review
  • Set an objective for the Sprint review (i.e What do you want to achieve out of the meeting?)
  • Start with your sprint goal (if you don't have one, spend a few minutes in sprint planning to set one). Share a subjective assessment on how the team fared against the sprint goal
  • Outline how the progress on each story (of the sprint) lead towards the eventual sprint goal

Conducting the Sprint review
  • Make sure the logistics are in place (Phone, webex, sametime etc) before the meeting
  • Organize the sprint review around demo of working-software (though no doubt, but very effective)
  • The Project team should drive the meeting (i.e make sure you are sharing your screen, you are showing the features and answering queries)
  • Pause at appropriate time to encourage discussion on the value being delivered

Avoidances (if you do any of the below mentioned, you are wasting time)
  • Reading stories from the backlog
  • Focusing too much on the story points (vis-a-vis actual value being delivered)
  • Treating sprint review as just a progress update

Are your project sprint reviews effective? Think again, and please feel free to add your perspective.

Monday, October 4, 2010

Five levels of Leadership

"Five levels of Leadership", Quoting John Maxwell

I couldn't have agreed more. All Managers start at level 1. The picture above outlines what it takes to make a transition from being a good Manager to be a good Leader.

thoughts?

Tuesday, September 28, 2010

The Social Network Ladder

Where Do you Figure?

Welcome MeeGo

MeeGo is a Linux-based platform that is capable of running on multiple computing devices, including mobile handsets, netbooks, tablets, connected TVs and in-vehicle infotainment systems. 

In February this year, Intel and Nokia announced joining their existing open source initiatives (Moblin and Maemo respectively) to form MeeGo project. MeeGo is hosted at the Linux foundation.

Why do I take notice? The following attributes of MeeGo makes it real interesting
  • Aimed at Developers and other OEM manufactures - a proven product placement strategy (ask Android)
  • Lowers complexity for targeting multiple device segments 
  • Enables all players of the industry to participate in the evolution of the software platform and to build their own assets on MeeGo
  • Offers differentiation abilities through user experience customization
  • Offers a compliance program to certify software stacks and application portability
  • Offers a compliance program to certify software stacks and application portability
  • Supports multiple app stores
It's too early to say whether MeeGo can pose serious challenge to Android. Nonetheless it's good enough a platform for IT leaders to take notice.

More on MeeGo:


Any experience on MeeGo? Please leave a comment.

Wednesday, September 22, 2010

Which software development methodology is right for you?

Over the past few months, I have interacted with many IT leaders in various agile forums. Irrespective of the process maturity in their respective organizations, I have always seen a pattern in all such discussions, which invariably leads to the question "What software development methodology is right for me?"

If we have interacted, you would know my response already...

To me, this is NOT the most important question you should be asking. Before you call any agile consultant, Kanban specialist or a RUP expert (?!$!), I would recommend you find answers to the following questions

1. What are my business objectives?
2. Does my current software development methodology encourage behavior aligned to my business objectives?
3. If not, can it (existing software development methodology) be optimized to align with my business objectives?
4. If yes, Which practices from other software development methodologies can integrated with my existing methodology?

If not, (Must you change to a new software development methodology)

  • Which behavioral changes you would like to see in your work force?
  • Which software development methodologies encourage such behavior?
Any software development methodology should be looked as a means to an end (achieving your business goals). In my experience, the the most common mistakes IT leaders do, it to incorrectly assume that adoption of a new software methodology is the end in itself. That is a recipe for disaster.

Thoughts? Experiences?


Monday, September 20, 2010

Lotus Traveler on Android - Lotus Calendar

In this last post of the series (covering my experiments on lotus traveler software on Android client), I explored the Lotus Calendar application closely.



IBM follows the consistent minimalist design approach (consistent to Lotus Mail on Android) where by default you see the meetings scheduled for today. You would see today's day and the date (default color 'red') just below the Action Bar.

Upon invoking the Options Menu (Menu button on your Android handset) you get the following options
- Option to see events for 1 day, 1 week or 1 month
- Option to Sync the Calendar with the server
- Option to see events planned for today

Upon invoking the more option menu, you get the following choices

- Goto Date - A nice feature to look up your planned events for any specific future date
- New Events - Probably to create new calendar entry, was not available in the current beta release.
That means you can't create meeting invites from Lotus Calendar, but can view all existing calendar events after syncing up with server.


All in all, I was not overly impressed by the user experience. But it works!
All I wish is IBM opens up a few APIs to allow enterprises to do basic customizations as per their needs.

NOTE - Lotus Traveler for Android will NOT be shipped with Lotus Domino 8.5.2. Disappointed with the delay, I am waiting for next beta release.

Friday, September 17, 2010

Lotus Traveler on Android - Lotus Mail

Follow-up to my previous blog post, I explored Lotus Traveler on Android client in detail. Here are my findings on Lotus Mail

Folder Options:
  • Provides the following four folder options by default



    • 'Inbox'
    • 'Draft'
    • 'Outbox'
    • 'Sent'
  • Personal folders are not support yet (at least in the current beta)
  • Existing emails in the sent folders are not synchronized by default




Inbox:
  • Displays up to 5 emails (Only!) without having to scroll. Personally I would prefer to see a better use of available real estate 
  • Nice little message icon (highlighted) appears on the Action bar, whenever you have an unread mail. Nice feature to inform you about new mail, even if you are using some other application at the time email arrives
  • What is key here is IBM approaches a minimalistic design and you don't see any menu options upfront. You need to use the 'Menu' of your handset to invoke what we call in android world as the 'Options Menu' 

Available Actions:

By invoking the Options Menu, you get the following actions on the Inbox
  • Compose - (Needless to say) composes a new memo
  • Settings - Opens all application setting (including mail, calendar etc)
  • Show folders
  • Sync Now
  • Search Mail - Queer observation - Search mail, doesn't work unless your mail database is full text indexed (!) - but you don't get any such warnings. Not a high degree of user experience on the search












Other Observations:
  • Attachments of any kind are NOT Supported yet
  • Easy browsing through emails as you get some contextual actions to move to next email or delete the current email
  • Ability to search for names before adding to the sender list
  • IBM has not exposed any APIs to customize the current Lotus Traveler for android. Hence it's a closed package now, take it or leave it









Up Next - My observations on the calender feature of Lotus Traveler for Android



Tuesday, August 31, 2010

First Look: Lotus Traveler on Android - Installation

With ample support from of IBM, I got an opportunity to participate in the limited beta release of Lotus Traveler (what is it?) for Android client. Here are the steps to install Lotus Traveler client on an android device.

Step #1: Identify the environment:


  • Lotus Traveler for Android requires "Lotus Domino Release  8.5.2 Code Drop 5" or above
  • Download the Lotus Traveler server task from IBM (Run the Lotus Traveler executable and point to the existing Domino server). Once installed, Lotus traveler task runs as any other server tasks (like Http, POP etc) on the domino sever. (Please refer to the screenshot)
  • Unzip the content of the "Lotus Traveler client for Android beta" file into the Domino/data directory of the server
  • Append the content of "VersionInfoExt.txt" into the existing file "VersionInfo.txt"
  • Identify a Android device running Android OS v 2.0.1 or above

Step #2: Access the url "http://<ServerName>/servlet/traveler" using the standard browser from your android device, Provide the login credentials as required. On the landing page, Click on the link 'Select an IBM Lotus Mobile Installer'

You should see Android as one of the available platform Options (Refer to the image on right). Click on the "Android" platform Option.

IBM provides the following two *.apk (android package) files (which you would have placed in Domino\data directory of the server as per step#1)
  • LotusInstall.apk
  • Lotus Traveler.apk
Upon selecting Android platform Option, the LotusInstall.apk file gets downloaded to the android device.

IBM separates out Actual Traveler software from the Installation Package. My guess, you will install "Lotus Installer" app only once and it should in future periodically check for the latest release of "Lotus Traveler" app from the server and download if there is a newer version.

Step #3: Starting the Installation
Running the Lotus Installer program would initiate the download and installation of the Lotus Traveler client.

Before running the Lotus Installer program, verify the Domino Server configuration document. Check the value in Server Document -> Lotus Traveler -> External Server Url. This field should be Non-blank and should point to your domino server. Apparently the Lotus Installer Program picks up the server name from this field and checks for availability of Lotus traveler client in there. As per the latest from IBM, in future releases, this issue will be fixed.

Once the file is downloaded, you would be prompted to initiate the installation. Once installation is complete, you would see the following four icons on your android device (see the picture)

  • Lotus Calendar
  • Lotus Installer
  • Lotus Mail
  • Lotus Traveler

The top three icons are self explanatory. Lotus Traveler icon will be used for checking status and monitoring operations that cross applications.

As I understand there would be another Lotus Traveler icon in the future release named 'Name Lookup'. This application will help users in directory/contact look up.

There you go, you have Lotus Traveler client on your android device.
In future posts, I will share my findings on usability/ functionality aspects of the Traveler email client.


Further Reference:
FAQ: Clarifications on Android beta release - Ed Brill's blog
Link to participate in the beta release of Lotus Traveler for Android

Monday, August 30, 2010

Ruby on Android

All Ruby developers interested in Android development, check this out

Thursday, August 19, 2010

Android musings: Options for storing persistent data

Android provides the following options for storing application data:
  • Preferences: Store primitive data in key value pairs (a detailed explanation below)
  • SQLite database: Preferred approach if your application needs relational data. Further, android SDK provides sqlite3 tool, which enables you to manage the SQLite database from a remote shell
  • Internal Storage: Save data in a file directly to device's internal storage. By default this data is private to the application only. When the user uninstalls the specific application, these files are removed
  • External Storage: Save data in a file into a removable media (such as an SD card) or an internal (non-removable storage). NOTE: There is no security enforced on files written to external storage. All applications can read and write to such files. Moreover users can manually (or accidentally) remove such files
For my SMSPost project, I had the specific need of storing two persistent parameters, e.g. frequency of scheduled run and URL for SMS upload.

I chose Shared Preferences as the persistent data storage approach, purely because of the ease of use in handling preferences. Shared preferences, enables relatively static data to be stored as Key Value pair and the data is accessible to all activities and services in the application. (NOTE - You can share your preferences across other application by defining the preference mode as MODE_WORLD_READABLE or MODE_WORLD_WRITABLE. For SMSPost application, we just needed the data to be available within the application, hence we set the mode as MODE PRIVATE) 

Sample Code:



// get handle to the shared preferences (called from an Activity Class)
        preferences = getSharedPreferences(Const.PREFS_NAME, MODE_PRIVATE); 

// writing to shared preferences
       SharedPreferences.Editor editor = preferences.edit();
       editor.putString(Const.PUBLIC_STATIC_TIMEPICKER_IDENTIFIER, resultFrequency);
       editor.commit();

//Reading from shared preferences
       if (preferences.getString(Const.PUBLIC_STATIC_TIMEPICKER_IDENTIFIER, "") == "")
                        return false;




Source: SMSPost.java

Please leave a comment if you have used any of the data storage options and would like to share your experiences.

    Monday, August 16, 2010

    Follow-up: What do story points relate to?

    This is a follow-up to my earlier post.

    When asked "What do story points relate to?"..here is how the readers responded.

    Result of the poll conducted on my earlier blog post

    In My opinion, story points have evolved to be a reflection of "relative" effort required to accomplish the story from just being a representation of "relative size". Here is why.

    In traditional software development, the size of a requirement doesn't change until there is a scope change. The size estimation doesn't take into consideration the factors which potentially may impact the effort involved..such as the unknowns, risks and complexity. Even if projects encounter schedule / effort slippages, the size remains constant and traditionally adept project managers attribute the delays to lower productivity.

    However in the value driven world of agile development, the bottom line is 'When can the working software be delivered'. The team comes together and estimates in story points to get a better handle in sprint / release / product planning. But the key aspect here is that story points intend to convey not just relative size (read scope of work), but also the capability of the development team, level of complexity and level of unknowns. Hence in my opinion, the story points best relate to the effort required to get the story 'DONE'.

    Does this explanation fit your view of story points? If not, please leave a comment.

    Wednesday, August 11, 2010

    Android UI design patterns

    Good to see effort from Google towards bringing consistency in Android UI design. It was long over due.

    A must watch for all android developers.



    Please share if there are any other good resources on Android UI design.

    Tuesday, August 10, 2010

    SMSPost: My first open source project

    For quite some time now I have been working on developing a "native mobile application" on Android platform. Finally I have mustered the courage to publish the source code as an open source project.

    Details:
    Name of the Project: SMS Post
    Source Code: https://code.google.com/p/smspost/
    High-level Functional Requirements: Reads SMS from any android device and posts the content to a predefined website
    License: GNU GPL v3

    In coming days, I would share my learning from the project.
    Please leave a comment, if you would like to contribute to the project.

    Tuesday, August 3, 2010

    What do "Story Points" relate to?

    All agile teams use "Story points" for sprint/release/product planning. However, I still notice confusion around what does the unit 'Story point' represent.

    To that effect, request you to participate in the below poll and share your subjective feedback via comments.




    I would compile the findings and share my thoughts in two weeks time.

    Friday, July 30, 2010

    Adopting enterprise mobility using Smartphones

    With ample help from my colleagues Basav, Jayendra and Dipen, I compiled my first study on role of Smartphone in enterprise IT. Check out the first draft:


    Comments are welcome.

    Saturday, June 5, 2010

    In search of Excellence

    A while ago, I had read the book "In Search of Excellence" by Thomas J Peters and Robert H Waterman. One particular quote from this book had left an indelible impression on my understanding of Leadership. Sharing the same below..

    "An effective leader must be the master of two ends of the spectrum: ideas at the highest level of abstraction and actions at the most mundane levels of details"

    As professionals move up in the corporate ladder, I observe they becoming less and less Hands-On. Decisions made without proper understanding of ground realities or without enough attention to details almost always prove to be wrong. Hence it's imperative for professionals to keep themselves abreast of the latest happenings in their core business area.


    For those who are interested, the book describes following 8 attributes of innovative organizations
    1. A bias for action
    2. Close to the the customer
    3. Autonomy and Entrepreneurship
    4. Productivity through People
    5. Hands on Value driven
    6. Stick to the knitting
    7. Simple form Lean Staff
    8. Simultaneous loose-tight properties
    Yet another quote from this book on "Creativity vs Innovation"

    "Creativity is thinking up new things, Innovation is doing new things.. A powerful new idea can kick around unused in the company for years, not because it's merits are not recognized but because nobody has assumed the responsibility of converting it from words into action. Ideas are useless unless used."

    HTML5 Readyness



    Source: HTML5Readiness.com

    Good To Great

    Just finished reading "Good to Great" by Jim Collins.

    I quite enjoyed reflecting/debating (with self) on the ideas put forth by the author. In the process, got moved by the following perspectives/Quotes
    • GOOD is the enemy of GREAT
    • "I never stopped trying to become qualified for the job" - Darwin Smith, CEO Kimberly-Clark (1971-1991)
    • People are NOT your most important assets. The RIGHT people ARE
    • Great companies made a habit of putting their best people on their best OPPORTUNITIES, not their worst PROBLEMS. Managing your PROBLEMS can make you GOOD, where as building on your OPPORTUNITIES is the only way to become GREAT
    • Stockdale Paradox: "You must maintain unwavering faith that you can and will prevail in the end, regardless of the difficulties AND at the same time have the discipline to confront the most brutal facts of your current reality, whatever they might be" - Admiral Jim Stockdale, PoW - Hanoi
    • Lead with QUESTIONS not with ANSWERS
    • Spending time and energy to motivate people is a waste of effort. The real question is not "How do we motivate our people". If you have the right people they will be motivated. The key is not to demotivate them.
    • The Hedgehog Circles (refer to the picture)

    • Leverage the Hedgehog Circles to define Organizational strategy
    • The more an organization has discipline to stay within it's three (Hedgehog) Circles, the more it will have attractive opportunities for growth. The challenge becomes not opportunity creation, but opportunity SELECTION
    • Sustainable transformations follow a predictable pattern of buildup and breakthrough


    The book helped me putting leadership and management in right perspective. Recommended for all.

    Sunday, May 23, 2010

    My take on Google I/O - 2010

    Sunday afternoons are usually my preferred time to catch-up on my Youtube subscriptions. I put that to good use today, by checking out Google I/O - 2010.

    Vic Gundotra's interpretation of I/O (as in Google I/O) as "Innovation in the Open" pretty much set the tone for the event. As expected Google bundled a slew of new technologies like Open Media Project, GoogleTV, GWT 2.1 + Roo and renewed support for existing technologies like HTML5 and Google Wave etc. In the process Vic Gundotra and team took every opportunity to make subtle innuendos at apple's perceived "closed-technology" stack, skillfully showed solidarity with troubled tech players like Adobe and Opera and lined-up an impressive panel of venerable CEOs for support of GoogleTV.

    To me, the launch of Android 2.2 was the key announcement. Here are the salient features of Android 2.2:
    - New JIT compiler to the Dalvic VM - resulting in 3X speed
    - Tethering
    - New APIs - Cloud-to-device messaging, data backup
    - Updated web browser - with V8 engine, HTML5 support, Support for Flash 10.1 and access to more and more native apis
    - 20 new enterprise oriented features, integration with MS Exchange server
    - Updates to AppStore : Installing apps directly on SD Card, AppStore accessible from PC
    - AdSense for Mobile Apps

    My take, Google continues to maintain it's leadership position to define the future of the Web.

    Some may argue that Google has lost focus by trying to attempt too many things at the same time. But to me there is always a method to the madness. Having already attained absolute control of online advertising, Google is lining up products aimed at the way people will consume the web in future i.e Mobile (android), entertainment (GoogleTV, YouTube) and traditional PC based access (with Google Wave, Google App Engine) etc. Many of these technologies are bound to fade into the oblivion, but I am sure at least one of these technologies will stand the test of time and that would be a Game Changer.

    Hail Google!

    Sunday, May 16, 2010

    Designing Android GUI - Unit of measurement

    Android supports multiple units of measurement (such as Pixels, inches, millimeters, points etc). However the following two units of measurement are critical for a good design:

    - Density-independent Pixels (dp) - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion.

    - Scale-independent Pixels (sp) - this is like the dp unit, but it is also scaled by the user's font size preference. It is recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and user's preference.

    As a best practice, never use anything but sp or dp unless you absolutely have to. Using sp/dp will make your Android applications compatible with multiple screen densities and resolutions.

    Thursday, May 13, 2010

    Google I/O 2010 - Live on Youtube

    Google I/O 2010 is coming to San Francisco on May 19-20 2010.
    Both the keynote talks will be streamed live on GoogleDeveloper Channel on Youtube.

    Grapevine is abuzz over potential release of Android 2.2 (Code name Froyo) during the I/O. Among other things there is talk of GoogleTV as well. We will wait and see.

    Here is the complete agenda.

    Sunday, April 11, 2010

    Rules of Thumb - 52 truths for winning at business without losing your self

    Rules of Thumb (by Alan M. Webber) was my cerebral diet for the weekend. The book outlines 52 practical advices on how to win at business without losing your self. Alan's approach of putting his points across by relating to past experiences is easy to read and easier to connect.

    Here are rules, I could relate easily:
    #3 - Ask the last question first
    #5 - Change is a math formula. Change happens when 'Cost of maintaining Status Quo is greater than the Risk of Change'
    #10 - A good question beats a good answer. Asking questions can be dangerous; Not asking them can be fatal
    #12 - The difference between a crisis and an opportunity is when you learn about it
    #17 - Entrepreneurs choose serendipity over efficiency
    #29 - Words matter
    #30 - The likeliest sources of great ideas are in the most unlikely places
    #32 - Content isn't the king; Context is
    #35 - Loyalty is a two way street - Arnold "Red" Auerbach - Coach, The Boston Celtics
    #41 - If you want to be a real leader; First get real about Leadership
    #43 - Don't confuse Credential with Talent. Hire for Attitude; Train for skill
    #45 - Failure isn't failing; Failure is failing to try
    #51 - Take your work seriously; yourself 'Not so much'
    #52 - Stay Alert! There are teachers everywhere

    Recommended reading..

    "Android is Apple's Burger King" - my perspective

    During my weekend browsing on twitter, I came across this interesting analogy comparing Apple vs Android to McDonald vs Burger King : http://bit.ly/a8ZSl2

    In the article Rob Diana argues
    - McDonalds leads innovation and consistency supported by detailed market study in selecting locations of their stores (comparable to apple's product innovation)
    - In contrast, Burger King follows a simple yet effective strategy of opening their store near to existing McDonald store and differentiates offering by allowing customers to choose the ingredients of their burger (comparable to Android's strategy of following iPhone with flexible hardware platforms)

    Here is my take:
    1. apple is undoubtedly the leading innovator in mobile computing. They are maximizing the tight coupling of hardware and software to deliver products that are more often than not prove to be game changer

    2. Android on the other hand is fast catching up, but I see following impediments to android's future growth
    - lack of control on underlying hardware: OS design is likely to get more and more complex (there-by inducing potential bugs) in future
    - As more and more manufacturers (without any differentiating value added services) adopt Android, it's only a logical conclusion that Android platform will be commoditized and cannibalized, their by allowing apple to strengthen it's lead

    It's high time that manufacturers like HTC, Motorola, Samsung, take a cue from "Burger King" model of being flexible in giving users what they want (at least in terms of innovation in service delivery, if not on technology)..

    Performance evaluation in Agile teams - Part III

    In this concluding part, I am sharing the retrospective findings from our new approach towards Performance evaluation in agile teams

    Continue:
    1. Empower associates to select their own goals (albeit within an organizational framework)
    2. Peer evaluation process

    Start:
    1. Periodic peer evaluations instead of waiting till the end of the evaluation cycle
    2. Include more subjective feedback

    Stop:
    1. None

    On hindsight, we realized partial success with the new process we adopted. Further in the process we realized there is a significant opportunity for disparate agile team to share and learn from each other.

    Sunday, March 14, 2010

    Performance evaluation in Agile teams - Part II

    This is a follow-up to my earlier post on performance evaluation in agile teams



    Traditionally our organization followed a balanced scorecard approach where organizational priorities get cascaded down to each individual in the form of performance goals for each evaluation period. Usually the Goals of the Appraisee is tied to the goals of appraiser. Performance evaluation happens in a bottoms-up manner where performance of each individual is aggregated to the next level (i,e, individual -> project team -> account team -> solution unit etc)

    Tailoring done for Self Organizing Agile Teams

    While we retained the basic philosophy of Balanced Scorecard, we did a number of tailoring specific to a self organizing agile teams. Following are the salient points:
    1. Introduce certain degree of flexibility in selecting your individual goals: While we retained the alignment of individual goals to organizational priorities, we allowed some flexibility for individuals to pick their own goals. We defined a framework around Impact on end customers, Impact on organization and effort towards self development and allowed individuals to pick their own goals and targets around these.
    2. Peer Evaluations: While we retained the best practices of bottom up evaluations, we added an additional step of "Peer Evaluation" specific to the agile teams

    Peer Evaluation process



    As the name suggests, Peer Evaluation process focuses on sharing your own assessment of your performance with your Peers (i.e Project teams) and getting their feedback. While we encouraged team to give constructive feedback on areas of improvement, we deliberately avoided any criticism of performance in this forum (Other mature teams may choose to disagree). At the end of the session, each individual provides a performance ranking of rest of the team and hands it over to the 'Appraiser' or 'functional Manager' as appropriate. Looking at the sensitivity around performance evaluations, we chose to keep this part confidential (again - other team may chose to share these rankings with the team too). The Appraise/Functional manager aggregates these rankings from all member of the team and prepares the performance ranking of the entire team.

    This process work in conjunction with the one-to-one performance evaluation discussion where the appraiser provides subjective feedback. At the end of the evaluation cycle, the performance ranking of the team gets rolled-up to the next level.

    In the next post, I will share our experience and learning from applying the above approach within our team.

    Sunday, March 7, 2010

    Performance evaluation in Agile teams - Part I

    This is a three part blog discussing ways of doing effective performance management in agile teams. In this part, I will try to establish the problem statement. In Part II, we will discuss one approach I am trying out as a pilot in my team. In the concluding part, I will share results from the pilot.

    As usual, i would request all netizens to add their valuable feedback on the way.

    Problem Statement:
    For quite some time, I have been grappling with finding ways to do effective performance evaluations in Agile teams.

    In ideal agile organizations we should be assessing the performance of the project teams, instead of assessing performance of individuals. Extending that line of argument, agile teams should also share the realized business value delivered by their project. But that's Utopian.

    In real world, enterprise IT invariably is treated as a support function to the business. Instead of sharing business value, enterprise IT is typically run with a predefined budget with a certain number of project teams. Most of the enterprises (like ours) use Forced Ranking as a means to incentivize high performance. Performance of individual employees are ranked relative to each other and the resultant grouping is fitted into the form of a bell curve, there-by separating high performers from average performers and from the rest.

    This approach works for many organizations. In order to make forced ranking model work efficiently, pioneers of this model - General Electric Corp, defines following three success criteria for your performance evaluation system:

    - have dimensional consistency: Its scales and criteria must be applicable across all employee categories
    - be based on objective data: "You just aren't going to be able to find quantitative measures for everything that is important to you. But you can still be objective—you can make decisions that are not colored by your emotions or personal preferences."
    - produce rich analytical feedback: Employees value meaningful assessments of their work more than any other performance motivator

    So far so good..but things get blurry when it comes to agile teams. Is it possible to set "dimensional consistency" for agile teams? Can there be a single scale for a number of different self organizing agile teams? How objective can you get to derive performance indicators vis-a-vis following agile practices of reducing ceremonies and minimizing waste. Most important, who does performance evaluation in agile teams? A functional manager? Or (in scrum context) the scrum master/ product owner?

    So how do we approach performance evaluations (maintaining the essence of force ranking from organizational standpoint) in agile teams? In following post, I would discuss the process we are trying out within my group (comprising of a number of agile teams).

    Reference:
    For whom the bell curve tolls
    Punishing by Rewards

    Android Tablet

    For all first time tablet users:
    Before committing to the pricey apple iPad, here is a cheaper option to get familiar with tablets..

    FirstView offers $95 tablet, running on android 1.4 (??# - Well..there is a plan to upgrade to latest version of Android!)..comes fully loaded with wi-fi and 3G..

    Wednesday, February 10, 2010

    Monday, January 11, 2010

    Android - Microwave & Laundry

    Touch Revolution has brought Android to home appliances. At CES Las Vegas, they showcased Nimble NIM1000 module, which allows OEMs to easily embed touch screen android into any home appliances.

    Checkout..Android Microwave


    Android Laundry:

    Sunday, January 10, 2010

    The decade in retrospect: Story of innovators, imitators and idiots

    As we closed on a momentous decade, I wonder what impact the events of the decade will have on our future. In retrospect, I can summarize the decade (borrowing from Warren Buffet: http://tinyurl.com/3pwx7m) as the story of three I's..that of Innovators, Imitators and Idiots.

    The decade started with the waning euphoria of new dot-com economy and ended with probably the greatest recession seen since the great depression of 30's. On hindsight the great financial disasters (dot-com bubble or the sub prime crisis) are marked by some great innovations.

    Analyzing the dot-com bubble, Innovators in Netscape, AOL, Google, Yahoo and Amazon redefined the way internet was perceived. Traditional heavy-weights like Microsoft, Cisco and Time-Warner realized the potential of the new economy started imitating to a great extent. However things go awry when the idiots arrived, whose avarice undid the very innovation they were trying to use to get rich. Easy money flowing in from IPOs, venture capital funds were spent on massive advertising campaigns without giving any thoughts to the long term commercial viability of the product at hand.

    The decade also saw, some of the greatest financial product innovation from the traditional investment banking firms of Wall street. In the process the world economy got intertwined as never before. The world economy grew at a scorching pace in the later half of the decade till..the over indulgence tool over. Early warnings were overlooked and we saw some high-risk transactions on already high leveraged market. When reality caught on..the fall was steeper than anything in recent memory.

    Both the above mentioned events have a lasting impact on the ways of doing business. As we look forward to a new decade, I am sure there would still be innovators. There would still be smart imitators who would be willing to cash on the innovations as they happen. However it would be interesting to see what the idiots learnt from the previous decade.