Sunday, October 18, 2009

The deceiving case of the 'Exceptional Scenario'

Two weeks back I had to drop my dad in the railway station for a night train. This particular railway station was one where very few trains had a stop and thus it's location was not familiar to many people.The first time I had to go to that place, I looked up Google Maps and it presented me with three alternate routes. Two routes were through small and confusing roads and were shorter than the third route where I had to take the national highway and then turn to local street roads which were much clearer than the first two options. I picked the third option, irrespective of it being longer, because there was an element of 'risk' involved in trying out small and confusing roads especially when you have a train to catch! The story goes on that I had to go to the station thrice (before this incident of dropping my dad) and all the time I took the national highway route, the route was perfect and hassle free except for a small stretch of road, about 200 meters which connected the main road to the station. That final stretch was through a slum like area, the road was just wide enough for a car and bike to go and I was confused whether it was a public road at all as the residents seemed to treat the road as an extension of their houses. The place had a unique co-existence of , Hindu, Christian and Islamic places of worship next to each other and every time I drove through that lane, the people used to have some celebration or the other (I appreciated the element of religious harmony, but not the prospect of having to drive through that narrow piece of road with people dancing around!). One day while I dropped my parents and was going back, I was forced to take another route (one of the first two options given by Google Maps) and found that even though I had to go through dingy roads, it was much shorter than the highway route as prescribed by Google Maps, but I could not exactly correlate the roads and the turns I had to take to reach the station as it was night time.
Now let's pan back to me dropping my dad! The train was at 9:30 PM and the drive takes around 45 minutes. We started from my home at 8:15 PM and I was juggling the two routes I could take - through the highway or through the shorter new route which I found the last time I came back after dropping my folks. The highway route was longer and I had to go through that last 200 meter stretch where I had the 'risk' of the entire road being blocked because of some celebration or the other. But nothing of that sort had happened anytime when I went there before - where the entire road was blocked and I could not reach the station, yes there was an outside possibility that it could happen, but that 'scenario' had never happened and was very 'rare'. The alternate route on the other hand was indeed shorter, but much more 'uncertain' and 'complex' than the highway route - there was a pretty high probability that I could take a wrong turn and lose my way and eventually my dad could end up missing the train, but that road did not present me with any possibility of being blocked - which mean that if I was able to find the correct way and take the correct turns, I had an almost 100% probability of reaching the station.
Which option should have I taken and why?
Well, this is not a suspense thriller (though it came close to it, my dad did not have to turn superman and chase the train to board it!!), so no spoilers in here - I took the 'tried and tested' highway route, had a smooth ride on the highway and reached the last 200 meter stretch in almost 30 minutes, I turned into the small road, drove for around 50 meters and tragedy struck! The entire road ahead was blocked by an idol of Virgin Mary and people were dancing and singing around it!! The station was just 150 meters ahead and I could not let my dad walk in the night through that area, there was only one option left - take a U turn and find a new way!! Finding a new way at the eleventh hour was a risk I did not want to take, so I had to do the most deplorable act of asking my dad to take a rickshaw and go to the station. The story had a not-so-tragic ending with my dad reaching the station before the train arrived and I kissed him goodbye (I followed the rick to reach the station! Shame on me!!).
That incident made me reflect on some of the design decisions and risk evaluations that we make in our projects. This is a very typical scenario - two alternate solutions are proposed for a problem. Solution 'A' is pretty straightforward using proven technology and easy to implement, the developers vouch that it will work for nine out of ten cases and the one case where it will fail being a very rare one. Solution 'B' on the other hand is a more complex and difficult one (but not impossible), using technology and methods which are not commonly used, but it will work for all scenarios. I have seen that majority of the time, Solution 'A' will be chosen and signed off by even the business team, vouching that they would handle that one exceptional scenario manually. The usual justifactions for this decision is the time saved by going for 'A' and the opinion that the incremental advantage accrued by fixing 1% of the exceptional cases cannot be justified by the increased effort and cost involved in developing solution 'B'.
I am convinced that the risk of the 'rare case' or 'exceptional condition' can be under-evaluated during the design phase and could strangle the entire operations if it does happen sometime (statistically it will!!). Even if it does not disrupt the operations, it could turn out to be an administrative menace over the long run for business users. This is something I have learnt during my support experience in TESCO, that seemingly trivial issues ignored during the development phase becomes a headache once the system goes live and once the organisation grows and the number of transactions increase. At this stage, extra effort will have to be spent in finding a solution to the problem, which in turn increases the cost of ownership of the product (the IT Support/ Maintenance team on the other hand would be happy, because it represents an opportunity to 'improve the system' and they can flaunt the 'savings' accrued by the fix in their quarterly metrics! It really doesn't speak volumes when you fix a defect downstream, though it is a great help for the business plugging holes in the system, it is highly undesirable and should be ideally captured during the development phase).
The argument that the cost involved in solving 1% of the issues is not justified stands true only when cost is calculated over the development phase. But if one considers 'Total Cost of Ownership (TCO)', which would be the cost of developing as well as supporting the system over it's entire life time, it can very easily be understood that the extra cost and effort incurred during the development phase to develop a fool-proof solution will lead to lesser maintenance issues and thus lesser TCO. (Considering the fact that typical development phases extend somewhere between 8 months to 2 years, while support phases will run into years and decades).
So in conclusion, I would like to state that when presented with alternate solutions, the choice should always go to the fool-proof one, even if it will take more effort and cost - because the money saved in the development phase by going for a quicker fix that works 99% of the time, will be lost during the support phase handling 1% of the exceptions over the course of the system.
P.S.: This issue and many others bring to the fore, the need for 'System Thinking'. I think that it is one of the most powerful management thoughts ever, but unfortunately is more linked to the way you look at a problem and is not a 'tool set' that can be easily implemented, which should explain why this great idea finds very little practical application. The fact is that IT projects are driven in such a manner that development and support are done by completely different teams and in many cases by different organisations - this takes away the accountability of developers and the organisation that carries out the development on the issues that prop up during the support phase and most developers have only done development and have never been in support, which cripples their ability to foresee possible issues and their impact. The way I see it, it is the customer that loses out it in the end - the IT teams, let it be development or support comes out clean in the whole act - once the product has been implemented the development team moves on to other engagements, while the support team gets more work fixing the issues left over unattended during development - it is the customer that gets caught in between. The world is not perfect nor ideal and from an ethical point of view, these are all not deliberate decisions that people make (in most cases) ('they signed off the design, so don't blame me!!', 'we had brought up that risk during the design phase, but even the business agreed to it', 'it is important that we meet the deadline, so considering the fact that the solution meets 99% of the cases, we should go with it' etc) - but can't we take small steps and decisions to improve the probability of perfection, not of the world, but atleast of the IT systems that we design?

Friday, October 2, 2009

Can you implement T&L without Absence Management?

I found this very interesting question in ITToolBox yesterday and thought would 'type in' (I would have scribbled or jotted few years back!!) my opinion on this. Let me restate the exact question as it appeared in the forum:

"We are trying to do an analysis of using Absence Manager without Time and Labor. We already have a customized module that feeds online timecards to payroll in peoplesoft. First, is this possible? If so, what functionality would we be missing out on? Everything I have read talks about them together. Is AM just the workflow piece?"

Though the user did not mention their actual requirement, the obvious answer is yes - traditionally over the years T&L has been implemented as a different module from Absence Management. May be the understanding of what these two modules do might help the user take an informed choice.
Absence Management is a module that is specifically designed to manage leaves - that's all it does. It is a very elegant and powerful module that can handle all types of leave accruals, carry forwards, prorations, workflows for approvals etc. It is interesting to note that before AM gained the popularity that it enjoys today, organisations have used Benefits, Monitor Absence in Workforce Admin and even T&L to manage leaves. Absence Management is an independent module and can be implemented standalone with core HRMS.
Time and Labor on the other hand is a much more diverse module that can handle time reporting of employee, track compensatory time offs, enable task based time reporting, calculate overtime and shift premiums etc. If there are no complex rules, T&L can also double up as the module handling leaves of your organisation.

The interdependence of the two modules has to be a thing of version 9.0. With version 9.0, T&L and AM have been coupled very tightly, where entire absence self service has almost been integrated in the timesheet. This could be the reason why it looks as if they cannot be implemented separately.
But the fact remains that both of them are independent modules and the choice of which module to use should completely depend on the depth and nature of your organisation's requirement.

Saturday, September 12, 2009

Support.Oracle.Com is here

How I welcome the new site for product support from Oracle! https://support.oracle.com is a very very welcome change from the clumsy erstwhile metalink website. For users who were comfortable with the Peoplesoft's customer connection site, navigating and raising a Service Request in Oracle's Metalink site was a night mare, it was terribly slow and required tons of clicks to get somewhere, add to add, finding the required information and product was incredibly difficult on Metalink.
But the new site for product support is an excellent one by my initial experience. Oracle has really gone in for flashy Web 2.0 features and Ajax and DHTML are heavily sprinkled all over the site. User friendly pagelets, saner page layouts, DHTML driven menu bars and an extremely improved process to raise Service Requests gives a rich experience to the users. I am particularly impressed with the redesigned SR creation process. A new window which summarises the information and points out the fields that a user has missed to fill are extremely handy. The image below shows the new Ajax enabled Oracle support site with a refreshing layout and design, note the small bar on the left side of the page alerting the users of the status of the IR. All in all, a neat job from Oracle!

Peoplesoft 9.1 - Release Value Proposition for Time and Labor

Oracle's coming out with some welcome enhancements to Time and Labor in the 9.1 release. The release value proposition (RVP) document which highlights the major feature additions to the various modules talk about the following enhancements to T&L:

  • Integration with Oracle Workforce Scheduler: I had mentioned this in a previous post and it will be a major product enhancement and offering from Oracle. I am raring to see how this integration works in 9.1 and I am sure a number of customers would love to have this feature in their enterprise application suites for workforce management.
  • Adoption of Approval Workflow Engine for T&L approvals: A number of HRMS modules like Absence Management has been using AWE from version 8.9, while the T&L application development team stuck to the traditional row security and time and labor groups driven approval. It is good to bring T&L to the fold of modules using AWE as organisations will be able to maintain the approval rules under a single framework. It will be interesting to see though how customers who are using custom T&L Dynamic group driven approval routings will migrate to AWE - I see some retrofit work there.
  • Adoption of Delegation Framework in T&L: Oracle started offering the delegation framework in version 9.0 and it is a welcome move that even T&L has moved over to that fold.
I also read about a very interesting and welcome enhancement is a bi-party integration with Microsoft Outlook 2007 (they have not mentioned whether they will be supporting older versions of MS Outlook) - I had mulled about this possibility while piloting the one way integration with MS Outlook from Peoplesoft. It is exciting to note that in 9.1, the Outlook Calendar and events can be read from Peoplesoft - it's high time that enterprise products integrate with desktop applications and this is a move in the right direction.

Sunday, August 9, 2009

Mass Loading Time into Timesheet

Last week there was a question on ittoolbox on how we can mass upload time into Time and Labor. I had mentioned in an earlier post that one of the features I would love to have in T&L would be one to upload reported time through a spreadsheet, because it is quite a common requirement to have a feature to mass upload time (especially during conversion projects). Here are the options one can mull over if ever it's required to mass load time into time and labor:

1. If you want to quickly enter time from PIA for a group of employees, then use the 'Report Rapid Time' utility. This can be found under the navigation - Time and Labor --> Report Time --> Rapid Time. Ensure that you run the 'Submit All Rapid Time' process after the above step. The only disadvantage with the above process is that you still need to key in the time as it's done online/
2. If on the other hand you want to automate the process completely by using an AE, you could explore the following options:
(a) Write a CI on the Report Rapid Time component and load time directly into the rapid time table and then run the Submit Rapid Time process.
(b) Use a File Layout and insert data into the TL_ST_ELPTIME table if you are loading Elapsed Time or TL_ST_PCHTIME if you are loading Punch time and then run the TL_ST_LIB Application Engine. The TL_ST_LIB AE will insert the data into the reported time table.
(c) Or if you want to directly insert into the RPTD_TIME table, then use the CI 'TL_RPTD_TIME_CI'

Wednesday, August 5, 2009

Deciphering the skeleton of Peoplesoft HRMS modules

The more I get to work on various modules, the more I find similarities between their basic architecture. For example, sample the architectural similarity between Payroll for North America, Time and Labor and Absence Management.

NA Payroll T&L Absence Management
Paygroups Workgroups GP Paygroups
Earning Program TRC Program Element Group
Earnings/Deductions TRCs Absence Takes
Calendars NA Calendars
Pay Run ID NA Calendar Run ID
Company NA Pay Entity
NA T&L Rules Formulas

It has also been my experience that almost all modules in Peoplesoft HRMS is designed to link the smallest functional unit of that module to the employee. For example, the smallest unit in T&L in TRC and everything that we do in Time and Labor is designed to link the correct TRC and quantity to an employee. The same would be the case for Absence Management and NA Payroll where the smallest unit would be an Absence Take and Earnings/Deductions respectively. Once you have this fundamental understanding, everything else will automatically fall in place.
Another powerful analogy is to an inverted pyramid where the smallest unit of the module will be at the tip at the bottom and the employee on the flat base at the top. The architecture of most modules I know builds up like an inverted pyramid from the smallest unit to aggregate in size and finally attach itself to an employee.

A simple example from Time and Labor would be the case of how a TRC is linked to an employee. At the bottom of the pyramid there is the TRC, above that is the TRC Program, above that there is the workgroup and finally at the base there is the employee. You can seamlessly extend this analogy to other modules as well.

A quick list of Absence Management Tables

I was thinking of writing a short yet extremely useful post and the first thing that came to my mind is Application Tables....For a table driven product like peoplesoft, getting to know the main records and their function is a huge plus.
So here is a very quick list of important tables in Absence Management.

1. PS_GP_PIN - Table that stores the pin details of all elements in GP/AM. Use to retrieve the Pin Name or Pin Code corresponding to a pin number.

2. PS_GP_ABS_EVENT - Major transaction table in Absence Management. All absences reported get stored in this table. The data in this table the raw reported absence. This table is analogous to the TL_RPTD_TIME table in Time and Labor.

3. PS_GP_RSLT_ABS - Table containing the calculated result of reported absence takes. The source for this table is GP_ABS_EVENT. This table is analogous to the TL_PAYABLE_TIME table. This table will contain one row for each day of the absence event. For example, an employee might report sick leave from the 1st to 5th of a month. GP_ABS_EVENT will have a single entry for the above event with a start date and end date. But, GP_RSLT_ABS will have five rows with each row containing the number of hours or days of absence.

4. PS_GP_RSLT_ACUM - Table containing the results of the accumulators in GP/AM. Accumulators can be used to track absence balances, cumulative takes, cumulative paid hours etc. This table is populated only after the absence calculation COBOL is run.

5. PS_GP_CAL_RUN - Table containing details regarding the Calendar Group ID. The Calendar Group ID is the major run control parameter used for running the absence processes and is a collection of various calendars.

6. PS_GP_PI_GEN_DATA - Any absence event that need to be sent to payroll will require a positive input (in terms of an Earning Code) to be defined. The positive input can be attached to a take in the Absence Take setup page. This table contains the corresponding positive input for the processed absences.

7. PS_GP_ABS_SS_STA - This table is coupled with the GP_ABS_EVENT table and is a workflow table. This table can be used to know the workflow status of an absence event. A separate entry is created for each workflow actions like Submit, Approval etc. This table can be very useful to track details regarding the approval/workflow status of an absence event.

Sunday, August 2, 2009

A short T&L quiz for the starters!

We recently started off an initiative that would fall under the category of 'Knowledge Management' (well using these terms are such a fad, but it helps to brand the initiative. Put simply it's just a quiz!!) to publish short quizzes/trivias on Peoplesoft every Thursday. I think it does it's small bit in building knowledge within the team - as it's short and simple, generates interest amongst the people, it's attached to a small rewards and recognition scheme and most importantly makes people go back to the basics of the things they work with every day.

So here is a small Time and Labor quiz that I prepared, it would rate 'easy' of the difficulty scale and we had a couple of people getting all the answers right. Why don't you give it a shot?

Question

Answer

Field that identifies whether time has come from TCD or Absence Management


What happens in Time and Labor when an employee goes on Maternity Leave?


Where can you configure the fields that appear on a timesheet?


Name the view that gives schedule details for each day


Name the table that contains the mapping of schedules and employees


Can you save a workgroup without specifying a TRC Program and Rule Program?


Field that can be used to identify whether payable time has been approved or not


After successful completion of time admin, the earliest change date of an employee is reset to which date? (Assuming there are no exceptions)


Which table contains the earliest change date field?


Monday, July 27, 2009

Goldplating vs. Great Customer Experience

Steve McConnell's classic mistakes in Software Project Management defines Developer Goldplating as following:
"Developers are fascinated by new technology and are sometimes anxious to try out new features of their language or environment or to create their own implementation of a slick feature they saw in another product--whether or not it's required in their product. The effort required to design, implement, test, document, and support features that are not required lengthens the schedule."
I find the entire concept of developer goldplating and it's classification as a 'classic mistake' extremely amusing. This is because the unfounded fear of goldplating restricts the creativity and realms of a developer and nips the chances of delving out outstanding customer service. Almost all the projects that I have worked on has had the customer coming back with his/her own 'wishlist' at the very last moment and traditional software engineering theory would say that it has to be treated as requirement creep and will have to be carried out as separate change requests in the future. Well that might sound judicious from the point of view of project management, but not from the view of customer experience management. Any project dedicated to providing a great customer experience should try to address even the last minute requests from the client - this is no goldplating and it will be something the customer will rave about. I know that may be nine out of ten people will not agree on this - but for someone who values a happy customer above anything else, requirement creep management can never come in the way of customer satisfaction!!

Auto-Displaying Search page results

What do you do if the customer comes up to you and says that they find clicking the 'Search' button on the search page cumbersome and would 'love' to have the search results defaulted when the search page loads.
This is where the SetSearchDialogBehaviour function will come to your rescue. Assign wildcard values to your search fields and call the SetSearchDialog behaviour function. This function is normally used in the context of skipping the search page. Theoretically, if a complete value is provided for all search keys before calling the SetSearchDialog behaviour function, then the search page will be skipped and the users will be taken directly into the transaction page. But the actual idea behind the function is that it will auto-trigger the search functionality. So naturally when just a wild card value is given to the search fields and the function invoked, then all the search results will be displayed. For example, if EMPLID is the only search field, the following code can be written to popualte the search results automatically on loading the search page.

/*Write this code in SearchInit.*/
REC.EMPLID.value = '%';
SetSearchDialogBehaviour(0);

Thursday, July 16, 2009

Oracle MINUS function works bottom to top

Remember that the MINUS function in Oracle works bottom to top and the order in which statements are written will change the result set! So select x from a minus select y from b is not the same as select y from b minus select x from a....The bottom part of the query is executed first and a MINUS function will always give those rows present in the bottom part of the query and not in the top half.

Sunday, July 5, 2009

Follow this blog on Twitter!

Twitter has not gained the popularity of a Facebook or LinkedIn in this part of the world - and the first time I took notice of the new kid on the social networking space was when the U.S. State department endorsed the importance of Twitter as a medium of communication for Iranians during the recent turmoil following the presidential elections there. That made me sit up andtake notice, boy if the U.S. State department had to make an appeal to a privately held dot com newbie, then it's got to be a phenomenon.
So the story goes that this blog is now on Twitter and you can follow me and all the updates to this blog at http://twitter.com/peoplesofthrms.
As a sidenote, I believe that it's time enterprise applications embrace Web 2.o applications like Twitter, Facebook and LinkedIn. Oracle is introducing a lot of Web 2.0 technologies like Ajax in the next Peopletools release (8.50), but they need to have a rethink in terms of adopting some of these social networking applications in the core product functionality. I believe that with the widespread adoption and following of these applications, the line between social portals and enterprise portals is slowly fading away - one immediate thought that comes to me is the use of tweets as a supplementary to alerts in Peoplesoft - wouldn't it be 'cool' to get tweets from Peoplesoft when your manager approves your absence request or when he completes your performance document review?