<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Passion of Software Engineer</title><subtitle type="html" /><id>http://blogs.msdn.com/dawei/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dawei/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/dawei/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2006-12-24T21:13:00Z</updated><entry><title>Identities, Contact and the Real Person Offline</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dawei/archive/2007/12/22/identities-contact-and-the-real-person-offline.aspx" /><id>http://blogs.msdn.com/dawei/archive/2007/12/22/identities-contact-and-the-real-person-offline.aspx</id><published>2007-12-23T00:02:00Z</published><updated>2007-12-23T00:02:00Z</updated><content type="html">&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT face=Cambria color=#4f81bd size=4&gt;“Miscommunication” Scenarios in Daily life&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;I want to start with some stories to illustrate miscommunication examples that happen in the real life. I am sorry that I have to mess up Bob and Jill’s life again. They are my favorite use case actor and actress since when I was in Pittsburgh. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 1: Bob is preparing a Xmas party. He is trying to call his old friend Jill’s cell phone +1(425)555-5555. However, Jill changed her cell phone a month ago. Then Bob tries Jill’s office number +1(425)666-6666. Since it is Friday 6PM, no one picks up the phone. Then Bob dials Jill’s home phone +1(425)777-7777, still no luck. So he just left a voice mail. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 2: Thanks to the new technology and the Internet! Bob is using &lt;/FONT&gt;&lt;A href="http://en.wikipedia.org/wiki/Windows_Live_Events" mce_href="http://en.wikipedia.org/wiki/Windows_Live_Events"&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;Windows Live Events&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; to create a party invitation to all his friends. He found Jill’s Gmail account &lt;/FONT&gt;&lt;A href="mailto:jill@gmail.com" mce_href="mailto:jill@gmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@gmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; and sent her the invitation as well. When Jill returned the call on Monday, Bob realized Jill is only checking Gmail account once a month. As Jill suggested, Bob sends invitation again to Jill’s Hotmail account: &lt;/FONT&gt;&lt;A href="mailto:jill@hotmail.com" mce_href="mailto:jill@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 3: The party went well. Bob took quite some photos of Jill and shared them on &lt;/FONT&gt;&lt;A href="http://skydrive.live.com/" mce_href="http://skydrive.live.com/"&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;Windows Live SkyDrive&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; with Jill by granting access permission to &lt;/FONT&gt;&lt;A href="mailto:jill@hotmail.com" mce_href="mailto:jill@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;. Jill just got a new Windows Live account &lt;/FONT&gt;&lt;A href="mailto:jill@live.com" mce_href="mailto:jill@live.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@live.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; and starts using it every day. However, she has to log back to &lt;/FONT&gt;&lt;A href="mailto:jill@hotmail.com" mce_href="mailto:jill@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; to view those photos. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 4: Jill is very upset after seeing the photos, as they are not as pretty as she had thought. She decided to block Bob’s from Windows Live Messenger for a while. Unfortunately, Bob found Jill was trying to block him because Jill has two Messenger accounts for Bob &lt;/FONT&gt;&lt;A href="mailto:bob@msn.com" mce_href="mailto:bob@msn.com"&gt;&lt;FONT face=Calibri size=3&gt;bob@msn.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; and &lt;/FONT&gt;&lt;A href="mailto:bob@hotmail.com" mce_href="mailto:bob@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;bob@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;, and she forgot to block both. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Have you seen some glitch here? What’s the root cause?&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT face=Cambria color=#4f81bd size=4&gt;Identity-based Communication is Problematic&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Before we continue, I want to clarify the definition of identity. I do not want to start a philosophical discussion. Rather I want to put it in a practical way, as long as you know what I am trying to say. It is good.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT face=Calibri size=3&gt;Identity is anything that we can use to distinctively identify an offline person. Identify can be: phones, emails, IM addresses, physical addresses. It can even be devices exclusively owned by the person. As long as we can uniquely identify the device, we can consider the device is an extension of the person. &lt;/FONT&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The miscommunications scenarios given above are &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Identity-based &lt;/I&gt;&lt;/B&gt;communication pattern. It is problematic for two fundamental reasons:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo1"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;1.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Identities change frequently. People change phone number, email address and move to different cities. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Communication channel will be broken as identity changes. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo1"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;2.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Identities are swarming. You can easily enumerate 10+ identities that people can reach you. The more identities you have, and the more complicated the communication pattern will be. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Identity-based communication is legacy from old days for ages. Unfortunately, the legacy constraint is too strong for us to break through. Even for new technologies, we still build the systems in the identity-based way, which is exactly what Bob and Jill have experienced. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Fortunately, we realize the problem and making progresses to change the situation.&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT face=Cambria color=#4f81bd size=4&gt;A Better Solution by Linking Identities&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;There are many good examples of improving identity-based solution by linking identities. Our life is getting better, even though sometime we do not realize what kind of problems those solutions are trying to resolve. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 1: &lt;/FONT&gt;&lt;A href="http://www.grandcentral.com/" mce_href="http://www.grandcentral.com/"&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;Google Grand Central&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; provides a unified phone number solution. For example, in scenario 1, Bob just dial one number, all Jill’s phones will ring until one of them is picked up. Therefore, Bob just need to remember one phone number, rather than three phone numbers to reach Jill. It is an example of linking phone identities. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 2: &lt;/FONT&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2327096&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2327096&amp;amp;SiteID=1"&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;Windows Live Linked ID&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;provides a solution to easily switch between Windows Live IDs. Therefore, in scenario 2, Jill can switch from &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="mailto:jill@live.com" mce_href="mailto:jill@live.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@live.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; to &lt;/FONT&gt;&lt;A href="mailto:jill@hotmail.com" mce_href="mailto:jill@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; without login back and forth. It is an example of linking email identities.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 3: &lt;/FONT&gt;&lt;A href="http://get.live.com/messenger/overview" mce_href="http://get.live.com/messenger/overview"&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;Windows Live Messenger&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; provides a solution to unify Email and IM Address. People might be confused: “hey, what are you talking about?”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Yep, one simple fact that people do not realize is that: “Email is email, and IM is IM”. Email and IM are totally different communication channels. They happen to have the same address does not mean they are the same thing. For example, in China, QQ is IM, but it is not email. Another example, IM with @passport.com domain looks like email but there is no mail box associated with that domain. (Emails sent to @passport.com will be rejected.) The fact that many IM systems using email as IM address is a great example of linking between IM identity and Email identity. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 4: Many web sites provide functionality of “register my computer”. So, next time user does not have to manually login again. It is an example of linking the user’s device identity with the user’s account identity. You can also consider finger print reader as a similar example as well. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 5: There is another great example of linking email identity and phone identity. However, I do not think I can talk about it now. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Linking identities makes our life better. However it is still not the ultimate solution as it did not resolve those two fundamental problems of identity-based communication: identities are frequently changed and swarming. &lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT face=Cambria color=#4f81bd size=4&gt;Contact-based Communication – One Level Abstraction and the Ultimate Solution&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Let’s think over about the first thing of software engineering – requirement elicitation. And let’s go back to scenarios between Bob and Jill, and figure out what are the real requirements.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 1: Bob is trying to reach Jill via phone. Bob does NOT care +1(425)555-5555 or +1(425)666-6666.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 2: Bob is sending Jill invitation via email. Bob does NOT care &lt;/FONT&gt;&lt;A href="mailto:jill@gmail.com" mce_href="mailto:jill@gmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@gmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; or &lt;/FONT&gt;&lt;A href="mailto:jill@hotmail.com" mce_href="mailto:jill@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 3: Bob is sharing photo with Jill. Bob does NOT care &lt;/FONT&gt;&lt;A href="mailto:jill@hotmail.com" mce_href="mailto:jill@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; or &lt;/FONT&gt;&lt;A href="mailto:jill@live.com" mce_href="mailto:jill@live.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@live.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Scenario 4: Jill is blocking Bob’s IM address. Jill does NOT care &lt;/FONT&gt;&lt;A href="mailto:bob@hotmail.com" mce_href="mailto:bob@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;bob@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; or &lt;/FONT&gt;&lt;A href="mailto:bob@msn.com" mce_href="mailto:bob@msn.com"&gt;&lt;FONT face=Calibri size=3&gt;bob@msn.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;We realize one thing: people are only caring about the real person, rather than his/her identities. When bringing the business online, what we really need is the one-to-one online abstraction of the offline person, rather than the person’s online identities. For the one-to-one online abstraction thing, we reuse and redefine the concept of contact. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT face=Calibri size=3&gt;Contact is the one-to-one online abstraction of the offline person. It is the collection of the person’s online identities. &lt;/FONT&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;After clarifying the definition of identities and contacts, the ultimate communication solution can be described in three phases. Please note: we consider any interactions between two people (requester and recipient) are within communication problem domain, which include email, phone, IM, mailing, and even permission granting and revoking etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;1.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Communication endpoints (requesters and recipients) should be contacts rather than identities. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;2.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Requester decides communication channel.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2"&gt;&lt;SPAN style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;3.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Recipient decides the binding of his/her identities and communication channels.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;For example, Bob decides sending invitation to Jill’s personal email. Jill decides which email address (&lt;/FONT&gt;&lt;A href="mailto:jill@gmail.com" mce_href="mailto:jill@gmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@gmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; or &lt;/FONT&gt;&lt;A href="mailto:jill@hotmail.com" mce_href="mailto:jill@hotmail.com"&gt;&lt;FONT face=Calibri size=3&gt;jill@hotmail.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;) is used as her personal email. &lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT face=Cambria color=#4f81bd size=4&gt;Conclusion&lt;/FONT&gt;&lt;/H2&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;When the offline people come online, they are shielding behind their identities. Over years, software systems are designed based on people’s online identities. Due to the fundamental weakness of identity, those systems are running into problem when trying to resolve communication problems.&amp;nbsp;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;Ultimately&lt;/SPAN&gt;, we need to shift the design principle from identity-based to contact-based solution, which is one level up abstraction and one-to-one mapping of the real person offline. &lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6838445" width="1" height="1"&gt;</content><author><name>Dawei</name><uri>http://blogs.msdn.com/members/Dawei.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/dawei/archive/tags/Software+Engineering/default.aspx" /></entry><entry><title>A Good Example of A Bad Design</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dawei/archive/2007/07/07/a-good-example-of-a-bad-design.aspx" /><id>http://blogs.msdn.com/dawei/archive/2007/07/07/a-good-example-of-a-bad-design.aspx</id><published>2007-07-07T21:17:00Z</published><updated>2007-07-07T21:17:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Two weeks ago, ProClub (a.k.a Microsoft gym) introduced a new lock system in the locker room, which requires inserting your member card before locking the cabinet. I left my member card inside the lock the first time I use it. I am a discipline person, left or forgot something rarely happen to me. I only left my work badge once, even that time I was still carrying the empty badge holder.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title="The New Lock" style="WIDTH: 400px; HEIGHT: 320px" height=320 alt="The New Lock" src="http://blufiles.storage.msn.com/y1pAKiJRMzCMqsI_CEW2BA0NDFWi8TLnV9m2Dw8162OFN1ROB8s_w06-B-Hx7n1Q4oXyvF5Ba8F0Z4" width=400 mce_src="http://blufiles.storage.msn.com/y1pAKiJRMzCMqsI_CEW2BA0NDFWi8TLnV9m2Dw8162OFN1ROB8s_w06-B-Hx7n1Q4oXyvF5Ba8F0Z4"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;I blamed myself for being careless. The next day, I went to ProClub to get my card back. The front desk lady was so nice to me. She went to an A4 printer paper box fully stacked with member cards. She grabbed hand full cards with last name start with “G”. I felt less guilty since my last name is only 2 characters, which could be easier for her to help me find my card back. It is all because of my carelessness. I asked her how many member cards in that box? “Few hundred” she answered peacefully and said “thanks for your patient”. I roughly estimated: an A4 box can hold nearly 4 ~ 5 hundred cards; From another angle, a hand full of cards can be 50 to 70, which all have last name start with “G”! Assuming five thousand people visit ProClub every day, nearly 10% people left their cards in the lock for the single day, and it was already the second week after the new lock system was in place. If 10% people make the same mistake, it could no longer be called “user error”. I felt relieved and I know whom I should blame – the lock designer. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;What’s the requirement? What is the problem the designer was trying to resolve? I asked the front desk lady, the old locks system work perfect for me and why we change them. The answer is to prevent single person from using multiple lockers. (I do not want to argue if it is a valid requirement. We assume it is valid.)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;What’s the design problem? I’d say the lock does not provide a way to remind the user of leaving member card inside the lock. Or put in another way, the design does not provide necessary indication of the existence of member card in the lock. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;How to solve the problem? Simply put, provide necessary feedback. There are two solutions in my mind. #1: make the front panel keep on flashing light as long as there is a card inside the lock. #2: after user unlocks the cabinet, the lock should keep on beeping until the owner removes the card from the lock.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;How to prevent this happen to me? I will program my life to prevent this happen to me again. Did I just say “program my life”? Yep, I am damn good software engineer. I will wrap my sock around the visible part of my card after inserting it to the lock. When I dress, it will remind me of removing my member card from the stupid lock.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3748993" width="1" height="1"&gt;</content><author><name>Dawei</name><uri>http://blogs.msdn.com/members/Dawei.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/dawei/archive/tags/Software+Engineering/default.aspx" /></entry><entry><title>Prototyping to Improve Design Accuracy</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dawei/archive/2006/12/24/prototyping-to-improve-design-accuracy.aspx" /><id>http://blogs.msdn.com/dawei/archive/2006/12/24/prototyping-to-improve-design-accuracy.aspx</id><published>2006-12-25T08:13:00Z</published><updated>2006-12-25T08:13:00Z</updated><content type="html">&lt;P&gt;How many times we realize that the software was implemented in the way very different from the original design? It is an overused example to describe the problem we are facing every day. That’s the reason I will not call design doc review until I have implemented certain amount of the prototyping code and have the confidence about the design accuracy. Software engineers hate to write design document, and it will change during implementation anyway. And sometimes, the design docs are more about recapping what we have done rather than the implementation guideline. I do not think it is because the software engineers are incapable to design accurately, but why?&lt;/P&gt;
&lt;P&gt;Let’s give a real life example, say you are planning the trip to the following address:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; One Microsoft Way&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Redmond, WA 98052&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; U.S.A.&lt;/P&gt;
&lt;P&gt;I am pretty sure you will do a good and accurate trip plan by using tools like &lt;A href="http://local.live.com/"&gt;http://local.live.com&lt;/A&gt;. But, what if I give you the following address (my home address in China)?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bi Tao Bei Yuan &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Zhong Shan District, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dalian, Liaoning 116001&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; P.R.China&lt;/P&gt;
&lt;P&gt;Even you might have excellent route plan, you will not very confident about issues like, foreign language, travel insurance, car rental, hotel, food, medical emergency etc. It is exactly the same problem we are facing in software design - many issues beside original requirements are vital and hidden. Most of projects we are working on today are like trips to foreign countries, which we have never been to. There are uncertainties along the way and some unknown issues will not pop up until you actually get there, which could impact your design dramatically. How to deal with those hidden issues and make your design more accurate? There are couples of lessons I have learned over years and want to share them with you. You are welcomed to add more. &lt;/P&gt;
&lt;P&gt;First of all, identify the scope. Believe or not, many projects do not have a clear scope until they are called code completed. Put in another way, the scope of software are sort of determined by development timeline. It is not anybody’s fault. It is merely one of the characteristics of software development – unpredictability. I am not saying that we should precisely define the scope before design, which is not practical at all. However, I strongly believe we should have clearly defined and prioritized items in a pipeline, which might or might not go into scope. By having the big picture in mind, we can avoid changing software design dramatically whenever we adjust the project scope. &lt;/P&gt;
&lt;P&gt;Secondly, identify the problematic items within the scope. Those items are unfamiliar to us and will cause uncertainties. We do not want to get into a situation that, when the project is 80% complete and find out that a critical component is technically not feasible. Here is an example of uncertainty from non-functional requirements. Say, we design online gaming software over some platform, later we realized that the platform cannot provide the real-time message delivery channel required by your gaming system. What a “surprise” if we have completed most of our code on top of that platform? &lt;/P&gt;
&lt;P&gt;Third, mitigate the uncertainties (also the risks) by prototypes. This is the skill I learned back in CMU. Uncertainties or hidden issues in software development can cause dramatic architecture impact or fail your project right away. To ensure we are heading the right direction with correct assumption, we need to do some experiments. They can be very small and even throw-away projects, however they should cover the real concerns we have in mind. &lt;/P&gt;
&lt;P&gt;Software design it is very complicated tasks. There are tons of books talking about it. They start from different perspectives, all come to one common goal – make software development more predictable. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1360127" width="1" height="1"&gt;</content><author><name>Dawei</name><uri>http://blogs.msdn.com/members/Dawei.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/dawei/archive/tags/Software+Engineering/default.aspx" /></entry></feed>