Monday, April 25, 2011

OnGoing Project Manages Business Rules

Commentary:  This is a series of posts that will follow highlights of an ongoing project I am currently engaging. The project is the development of a turnkey thematic shopping cart. My charter as the project manager is to develop the prototype site, establish baseline performance metrics or reasonable sales, and turnover the prototype deliverables. I am not at liberty of discussing client specifics but will provide general highlights of the project in a series of sporadic posts. 

Business Rules

Success of a project from the PMI perspective is dependent upon the management of the scope, schedule, quality, cost, and achievement of the project objectives. From a purely pragmatic, get-the-job done, operational perspective this is sufficient. However, effectiveness and operational efficiency is not always considered. Sometimes businesses bring in lean experts afterwards or fine tune PMI styled projects using Six Sigma continuous improvement project methods later. Taking into consideration leaning the process early on in a PMI styled project may save money, efforts, and strengthen project effectiveness.

During the thematic shopping cart project, I have held such a focus. One of the concerns is the timing of the business rule execution. The error and format checking can be processed either client side or server side. If all the users hitting the site are processed on the server side this requires additional processors and RAM to handle the loading. So I decided to process basic error and format checking on the client side. By distributing this processing, I am able to achieve faster posts and reduce computational requirements at the hosting site saving cost as some hosting sites will charge extra for high load sites.

In achieving this goal, I decided to use client side JavaScript and Document Object Module, DOM, methodologies. Regular expressions, logical vetting, and format comparisons were used to vet the business rules ensuring the data is properly formatted, does not contain invalid characters, or is not blank.  I also provided messaging and stop light indicators to aid users in identifying issues. The following function is an example of the simple javascript that can vet characters in a password string as they are entered on the form. When the string length is long enough the stoplight bulb turns green. If any invalid characters are entered then a message appears informing the user.

<script>
function ComparePword(){
var BaseLine = document.getElementById("CreateForm").elements[1].value;
var BaseLineLen = BaseLine.length;
var CharChk = BaseLine.match(/[!^%$#]$/g); /* ------ Regular Expression */
 /* ---------------------------- Check for Invalid Characters */
if(CharChk == "#" || CharChk == "$" || CharChk == "%" || CharChk == "^" || CharChk == "!" ){
                 var MSG1 = CharChk + " is a prohibited character";
                document.getElementById("MSG").value = MSG1; }
       else{
  var MSG1 = "";
  document.getElementById("MSG").value = MSG1; }
/* ---------------------------- Check for required length */
  if( BaseLineLen > 5 ){
  document.getElementById("status1a").src="images/GRN-BALL.GIF";}
  else{
              document.getElementById("status1a").src="images/RED-BALL.GIF"; }
return;
       }
</script>

You can observe the code in action at Sample Code. I simplified the script for demonstration purposes. The actual scripts are much more involved.

The overall take away is that when business rules are evaluated early and on client machines, computational requirements can be reduced and application performance can be enhanced. The overall outcome is that not only is the project a success based on scope, cost, schedules, quality and objectives but it also becomes a broader success because simple technical considerations normally overlooked were handled effectively.

CommentaryIn my next post, I want to return to operational project management processes from these tactical considerations that enhance project success. I want to discuss the SDLC processes on this project.   The next post is not scheduled so please monitor for it.   Please review my other postings. Feel free to email me at james.bogden@gmail.com or post a comment. Thanks for reading!

Project Posts:

1. Ongoing Project: Combining Project Management with Hands On Skills
2. Project Management: Unique Skills Beyond Paper Documents
3. OnGoing Project Manages Business Rules

Sunday, April 24, 2011

Project Management: Unique Skills Beyond Paper Documents

Commentary:  This is a series of posts that will follow highlights of an ongoing project I am currently engaging. The project is the development of a turnkey thematic shopping cart. My charter as the project manager is to develop the prototype site, establish baseline performance metrics or reasonable sales, and turnover the prototype deliverables. I am not at liberty of discussing specifics but will provide general highlights of the project in a series of sporadic posts.

Project Management and Unique Skills

While project managers create the standard project documents, technical specifications, and a plan of action and milestone (POA&M) at the operational level, the tactical piece requires unique skills. The technical requirements can be achieved tactically in many ways. Each approach has its benefits and drawbacks. For example, without getting into the security specifics, this project has a requirement to default to the lowest level of access. That way if someone attempted to load a session page directly from the browser without logging in, it will redirect to the login page by default. This required careful testing of the logical constructs ensuring that the default is always to redirect to the login on any failed state. This sounds simple but incorrectly using operators or poor logical structures may create a subtle vulnerability. Aside from the careful review of the code execution for security design, other error checking and database design issues were just as challenging.  Many-to-many relationships are one of these challenges. These relationships do little for data normalization but are useful especially in sales and distribution design patterns. 

First, let us discuss this site project in general which is product centric having some complex relationships. There are base prices, retail prices, sales prices, and special pricing.  The vendors may include the manufacturer, wholesalers, and retailers. Products are assigned to multiple marketing channels and fulfillment services may be through more than one source. Thus, each product item may have several prices, vendors, and fulfillment sources. Source selection is determined by the mix of products desired by the client. I managed these relationships in the database through the use of many-to-many relationships. In handling the many-to-many relationships I used what I called matrix tables as demonstrated in Illustration 1.


When calling data from these tables, I used SQL SELECT statements that related the many-to-many relationships without getting to complicated but is a little more than an ordinary SELECT statement.   For example:

SELECT * FROM TBL_Item, MTX_ItemVendor, TBL_Vendor, TBL_Prices WHERE TBL_Item.IID = MTX_ItemVendor.IID AND MTX_ItemVendor.VID = TBL_Vendor.VID AND TBL_Item.IID = TBL_Prices.IID ORDER BY ItemName, VendorName.  

I had to be sort of tricky on the adding of a product by breaking up information in the form into separate actions such as inserting basic item data then the base pricing followed by vendor assignments. First, I inserted the new item record using a SQL statement similar to this one;

INSERT INTO TBL_Item (Name, Desc, Status) VALUES ('#Name#', '#Desc#', '#Status#')

Then I grabbed the new record identity immediately;

SELECT @@IDENTITY as 'Identity' FROM TBL_Item

I set the Identity equal to the IID then turned to the pricing. In the management of the information additional pricing is added later during routine updates as required but first the base pricing is inserted as the product record is created. I did not show the pricing table in Illustration 1 but it is in a one-to-many relationship to the Item table. Creating this pricing record is a simple insertion of the price into the price table much like this following statement that uses the captured Identity;

INSERT INTO TBL_Prices (IID, Price, Reason) VALUES ('#IID#', '#Price#', 'Base Price')

Finally, I pulled the vendor identities from the form list box of vendors then related the vendor to the item  in a looping construct. Coldfusion performed the looping based on the number of selected vendors. I used incremental variables where n indicated the vendor in the list box options then looped and inserted the records for the selected vendors in the selected array list using a SQL statement like this;

INSERT INTO MTX_ItemVendor (IID, VID) VALUES ('#IID#', '#VIDn#') 

The actual code, constructs, and field names were more detailed than the what I provided here. Nonetheless, the handling many-to-many concepts are what is important. I tried to keep it as simple as possible without sacrificing performance or security. One important step was to understand the full process and when specific information was needed. Cramming all the information into one form and trying to do everything at once is not always the best solution. For example, alternate pricing can be an update to the item record when the pricing is needed. Thus, at item record creation only the base price is really needed. Likewise, the processing of the information in the form was broken up in a behind the scenes in the processing page in which the form data was handled in incremental steps. Many-to-many relationships can be useful in some design patterns and may even simplify what could have been a complicated table structure and SQL actions.

In my next post on this project, I want to discuss the error checking methods I used with some of the forms to vet business rules without loading the server with unnecessary processing.

Commentary: The next post is not scheduled so please monitor for it.   Please review my other postings. Feel free to email me atjames.bogden@gmail.com or post a comment. Thanks for reading!

Project Posts:

1. Ongoing Project: Combining Project Management with Hands On Skills
2. Project Management: Unique Skills Beyond Paper Documents
3. OnGoing Project Manages Business Rules

Monday, April 4, 2011

When Conflict is Inevitable: ComeBacks at Work

Commentary: The work place has become a challenging place today. People are on edge, tempers flare, and in some cases the competitiveness has taken a hostile direction.  Simply good communication skills is not enough.  Professionals must become skilled at handling difficult people and in many cases corporate psychopaths.

This series of postings will discuss using communication methods to gain control of circumstances and reduce your chances of becoming a target. We will cover ten (10) chapters in the book "Comebacks at Work" over the next several weeks. I'll attempt to couple these when appropriate with other authors works such as Dale Carnegie.

When Conflict is Inevitable

People disagree. Thus, conflict is inevitable.  The trick is to manage disagreement in constructive ways and to avoid having ourself drawn into responding in disagreeable ways. One cannot be defensive nor needlessly personal.  Taking yourself out of disagreements and emotional detachment is important achieving an effective comeback.

Get Rid of "I" and "Me"

If you hear yourself using the words "I" or  "Me" more than occasionally then you more than likely are the problem. Using these pronouns allows emotions and feelings to dominate your thoughts and places the focus on yourself rather than the source of a problem. By doing so, the offending person does not have to explain, apologize, or correct their ways. Simply reframing your own responses to remove any personal focus and place the offending comment under the lens strengthens your position. In some cases, you can reframe ignoring insults and move things forward giving them a pass even though you know exactly what was intended. In essence, saving face is a Dale Carnegie thought. You will need to weigh your approaches and determine what is best for your objectives.

Thinking Along with Your Opposition

In general and as a rule, describing your emotional state is not appropriate and can be a mistake. Nonetheless, there are times to address emotions. At times, both sides have deeply invested views. Co-opting common portions and principles of the opposing side can allow for open discussions and debates without yielding the emotionally invested portions.  Making people feel they are wrong and you are right by virtue of their error rarely is effective.  Somehow you got to connect what matters to you with what matters with others.

"Telling it like it is" places people on the defensive. Inflammatory remarks simply indicates you fail to recognize  that people are often only partially incorrect. If you listen to what people say then you will realized that there are nuggets of agreement. Unfortunately, most people fail to see them.  Finding those nuggets during dissension is not easy but can save face, keep relationships sound, and move discussions forward.

Getting Past Derision

At times, we are all confronted with mockery and ridicule, derision. Sometimes the conduct originates from cultural bias, stereotypes, and at other times from immature behavior. Whatever the source of the derision,  you need to push through your doubts conjured up by the poor expectations of others. You need to bypass the negative first impressions and with confidence press ahead. 

To Put It In Your Words

Sometimes an offensive remark can be made part of a positive response. Rather than fight everything, consider parsing out pieces then co-opting them into your response.  This takes practice and you need to learn to listen carefully. Some people simply speak in negative manners that can derail progress. Learn to flip thoughts to positive connotations.

When Words Alone Will Not Do

Facial expressions and other body language can stand alone as comebacks. They can be more effective too. Gaining control and practicing the use of body language can send signals when words are not as effective.

Make People Feel Bigger

Always work to elevate other people even though the dispute is spirited. Ronald Reagan was a great communicator who used humor to refocus the situation.

Commentary: Making people feel bigger hinges on several Dale Carnegie principles such as Arouse Eager Want in Others, Make the other person feel important, or The only way to get the best of an argument is to avoid it.

Reardon, K.K., (2010). Comebacks at work: using conversation to master confrontation. (1 ED.). Harper Collins publishers, New York