<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>The Passion of Software Engineer - 软件工程师的动力</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/dawei/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/dawei/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:47:44 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>软件工程中的“剑宗” 和 “气宗” （原作于2005年12月）</title>
      <link>https://docs.microsoft.com/archive/blogs/dawei/200512</link>
      <pubDate>Mon, 24 May 2010 20:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Dawei_MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dawei/2010/05/24/200512/</guid>
      <description><![CDATA[声明本人向来不看武侠小说，也从未看全过任何一部武侠连续剧。偶尔无聊时，陪着朋友看过一两集，只是图个乐和。窃认为金庸的小说可用几个字概括：好人真好，坏人真坏；一有打架，动手前一大堆废话，还有一大堆旁观者...]]></description>
      <content:encoded><![CDATA[<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">声明本人向来不看武侠小说，也从未看全过任何一部武侠连续剧。偶尔无聊时，陪着朋友看过一两集，只是图个乐和。窃认为金庸的小说可用几个字概括：好人真好，坏人真坏；一有打架，动手前一大堆废话，还有一大堆旁观者在站着评论，树上或房顶上还会藏两个。管中窥豹，大家见笑了啦！述归正传，有一集给我留下的深刻印象。我忘了戏名，只记得武当两派打架。一派主张剑术，称作&ldquo;剑宗&rdquo;；另一派主张内功，称作&ldquo;气宗&rdquo;。本来是文斗，后来改为武斗。打得不可开交很是热闹。剧情大体这样，却让我联想起在软件工程领域中也有着类似的派别之争。 </span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&nbsp;</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;"></span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">按照历史先后顺序，先来说说软件工程中的&ldquo;剑宗&rdquo;&mdash;&mdash;经验论（Empiristic）。&ldquo;剑宗&rdquo;提倡软件流程（Software Process）为主导。其实我在本科所学到所有软件工程知识都是关于软件流程。例如：瀑布模型，螺旋模型等等。不知道现在高校课程是否还停留在这里。软件流程主张针对复杂的软件开发过程进行模式化，定义行为规范，监控实施细节，量化管理。以保证软件开发的可预见性（Predicability）可重复性（Repeatability）。软件流程所定义内容深广，从需求分析（Requirement Elicitation），设计（Design），实现（Implementation），测试（Testing），到维护（Maintanence）。&ldquo;剑宗&rdquo;一位重要人物当属Watt Humphrey，著作有Personal Software Process, Team Software Process还有国内IT人人皆知的CMM模型。其同事Mark Paulk主导完成了CMMI的模型定义。</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&nbsp;</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">在说一说&ldquo;气宗&rdquo;&mdash;&mdash;科学论（Scientific）。&ldquo;气宗&rdquo;提倡软件架构（Software Architecture）为主导。软件架构是介于软件需求分析（Requirement Elicitation）和软件高层设计（High Leve Design）之间的一个环节。不能简单等同于UML的类图。软件架构应该贯穿于整个软件开发流程，从需求分析到质量保证和维护。如同现实中建筑蓝图（Blue Print）一样的角色。我们对软件架构又很高的期待，只可惜到现在为止，为没有一个人能清楚的定义到底什么是软件架构。&ldquo;气宗&rdquo;鼻祖当属Mary Shaw，曾是软件工程学院（SEI）的首席科学家，最早提出软件架构的概念。尔后便是David Garlan，一直试图利用Formal Method描述软件架构。两人合作的一本书Software Architecture（中译本为&ldquo;软件体系结构&rdquo;）堪称最早关于软件架构的教科书。</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&nbsp;</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">好了看看两派如何出招的吧！&ldquo;剑宗&rdquo;认为软件流程是当前软件危机最有效的解决方案。Jim Tomayko曾经引用飞机机翼制造作为一个例子：先前在流体动力学还没有产生的时候，工程师就已经可以设计出非常合理的机翼了。虽然流体动力学后来提供有力佐证，但是工业界不必非要等到科学理论的成熟。当前软件工程中的科学理论，还远未成熟。软件工程师因该着力于从实际工作中，总结软件开发经验，而不是探究公式推倒。</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&nbsp;</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&ldquo;气宗&rdquo;认为软件架构是答案。因为任何一门领域，只有当理论基础夯实的时候，才可以有质的飞跃。我曾问过David Garlan一个问题：&ldquo;软件流程模型虽然非常详尽，但是对于软件高层设计却没有提供方法支持。可是软件高层设计，人为因素很大，不确定性很高，关乎软件成败，怎能简简单单用流程来描述？&rdquo;我这个问题问得很好，或者可以说马屁拍得的好，正中David下怀！他笑说：&ldquo;是啊，有些人花了10多年才明白这个道理&rdquo;</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&nbsp;</span></span></div>
<div><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">其实每个人都知道软件流程与架构都是不可或缺，相辅相成。软件流程在10余年里，逐渐得到人们的肯定CMM的认可足以说明这点。而软件架构在近些年里，也得到很多的重视，尽管还没有确切的定义。我很有幸在CMU了解两派的观点。随着对软件工程的认识积累，我也逐渐由&ldquo;剑宗&rdquo;转化为&ldquo;气宗&rdquo;。其实，不论&ldquo;剑宗&ldquo;还是&ldquo;气宗&rdquo;，都是学术上的问题。在软件行业领域里，并没有太大的分歧。例如Rational的UML规范，把流程和架构一起抓，怎么实际怎么用。大有&ldquo;少谈些主意，多解决问题&rdquo;的意思。</span></span></div>]]></content:encoded>
    </item>
    <item>
      <title>Identities, Contact and the Real Person Offline</title>
      <link>https://docs.microsoft.com/archive/blogs/dawei/identities-contact-and-the-real-person-offline</link>
      <pubDate>Sat, 22 Dec 2007 16:02:00 GMT</pubDate>
      <dc:creator><![CDATA[Dawei_MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dawei/2007/12/22/identities-contact-and-the-real-person-offline/</guid>
      <description><![CDATA[&ldquo;Miscommunication&rdquo; Scenarios in Daily life
I want to start with some stories to...]]></description>
      <content:encoded><![CDATA[<h2 style="MARGIN: 10pt 0in 0pt"><span style="color: #4f81bd; font-size: medium;"><span style="font-family: arial,helvetica,sans-serif;">&ldquo;Miscommunication&rdquo; Scenarios in Daily life</span></span></h2>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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&rsquo;s life again. They are my favorite use case actor and actress since when I was in Pittsburgh. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-family: Calibri; font-size: small;"></span><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Scenario 1: Bob is preparing a Xmas party. He is trying to call his old friend Jill&rsquo;s cell phone +1(425)555-5555. However, Jill changed her cell phone a month ago. Then Bob tries Jill&rsquo;s office number +1(425)666-6666. Since it is Friday 6PM, no one picks up the phone. Then Bob dials Jill&rsquo;s home phone +1(425)777-7777, still no luck. So he just left a voice mail. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Scenario 2: Thanks to the new technology and the Internet! Bob is using </span></span><a href="https://en.wikipedia.org/wiki/Windows_Live_Events"><span style="color: #800080; font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Windows Live Events</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> to create a party invitation to all his friends. He found Jill&rsquo;s Gmail account </span></span><a href="mailto:jill@gmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@gmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> 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&rsquo;s Hotmail account: </span></span><a href="mailto:jill@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Scenario 3: The party went well. Bob took quite some photos of Jill and shared them on </span></span><a href="https://skydrive.live.com/"><span style="color: #800080; font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Windows Live SkyDrive</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> with Jill by granting access permission to </span></span><a href="mailto:jill@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">. Jill just got a new Windows Live account </span></span><a href="mailto:jill@live.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@live.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> and starts using it every day. However, she has to log back to </span></span><a href="mailto:jill@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> to view those photos. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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&rsquo;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 </span></span><a href="mailto:bob@msn.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">bob@msn.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> and </span></span><a href="mailto:bob@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">bob@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">, and she forgot to block both. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Have you seen some glitch here? What&rsquo;s the root cause?</span></span></p>
<h2 style="MARGIN: 10pt 0in 0pt"><span style="color: #4f81bd; font-size: medium;"><span style="font-family: arial,helvetica,sans-serif;">Identity-based Communication is Problematic</span></span></h2>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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. </span></span></i></b></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">The miscommunications scenarios given above are <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal">Identity-based </i></b>communication pattern. It is problematic for two fundamental reasons:</span></span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l1 level1 lfo1;"><span style="font-family: arial,helvetica,sans-serif;"><span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-size: small;">1.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: small;">Identities change frequently. People change phone number, email address and move to different cities. <span style="mso-spacerun: yes;">&nbsp;</span>Communication channel will be broken as identity changes. </span></span></p>
<p class="MsoListParagraphCxSpLast" style="text-indent: -0.25in; margin: 0in 0in 10pt 0.5in; mso-list: l1 level1 lfo1;"><span style="font-family: arial,helvetica,sans-serif;"><span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-size: small;">2.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: small;">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. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Fortunately, we realize the problem and making progresses to change the situation.</span></span></p>
<h2 style="MARGIN: 10pt 0in 0pt"><span style="color: #4f81bd; font-size: medium;"><span style="font-family: arial,helvetica,sans-serif;">A Better Solution by Linking Identities</span></span></h2>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Example 1: </span></span><a href="https://www.grandcentral.com/"><span style="color: #800080; font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Google Grand Central</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> provides a unified phone number solution. For example, in scenario 1, Bob just dial one number, all Jill&rsquo;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. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Example 2: </span></span><a href="https://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2327096&amp;SiteID=1"><span style="color: #800080; font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Windows Live Linked ID</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"><span style="mso-spacerun: yes;">&nbsp; </span>provides a solution to easily switch between Windows Live IDs. Therefore, in scenario 2, Jill can switch from </span></span><a href="mailto:jill@live.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@live.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> to </span></span><a href="mailto:jill@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> without login back and forth. It is an example of linking email identities.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Example 3: </span></span><a href="https://get.live.com/messenger/overview"><span style="color: #800080; font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Windows Live Messenger</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> provides a solution to unify Email and IM Address. People might be confused: &ldquo;hey, what are you talking about?&rdquo;<span style="mso-spacerun: yes;">&nbsp; </span>Yep, one simple fact that people do not realize is that: &ldquo;Email is email, and IM is IM&rdquo;. 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. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Example 4: Many web sites provide functionality of &ldquo;register my computer&rdquo;. So, next time user does not have to manually login again. It is an example of linking the user&rsquo;s device identity with the user&rsquo;s account identity. You can also consider finger print reader as a similar example as well. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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. </span></span></p>
<h2 style="MARGIN: 10pt 0in 0pt"><span style="color: #4f81bd; font-size: medium;"><span style="font-family: arial,helvetica,sans-serif;">Contact-based Communication &ndash; One Level Abstraction and the Ultimate Solution</span></span></h2>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Let&rsquo;s think over about the first thing of software engineering &ndash; requirement elicitation. And let&rsquo;s go back to scenarios between Bob and Jill, and figure out what are the real requirements.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Scenario 1: Bob is trying to reach Jill via phone. Bob does NOT care +1(425)555-5555 or +1(425)666-6666.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Scenario 2: Bob is sending Jill invitation via email. Bob does NOT care </span></span><a href="mailto:jill@gmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@gmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> or </span></span><a href="mailto:jill@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Scenario 3: Bob is sharing photo with Jill. Bob does NOT care </span></span><a href="mailto:jill@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> or </span></span><a href="mailto:jill@live.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@live.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Scenario 4: Jill is blocking Bob&rsquo;s IM address. Jill does NOT care </span></span><a href="mailto:bob@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">bob@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> or </span></span><a href="mailto:bob@msn.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">bob@msn.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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&rsquo;s online identities. For the one-to-one online abstraction thing, we reuse and redefine the concept of contact. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">Contact is the one-to-one online abstraction of the offline person. It is the collection of the person&rsquo;s online identities. </span></span></i></b></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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.</span></span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2;"><span style="font-family: arial,helvetica,sans-serif;"><span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-size: small;">1.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: small;">Communication endpoints (requesters and recipients) should be contacts rather than identities. </span></span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2;"><span style="font-family: arial,helvetica,sans-serif;"><span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-size: small;">2.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: small;">Requester decides communication channel.</span></span></p>
<p class="MsoListParagraphCxSpLast" style="text-indent: -0.25in; margin: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo2;"><span style="font-family: arial,helvetica,sans-serif;"><span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-size: small;">3.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: small;">Recipient decides the binding of his/her identities and communication channels.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">For example, Bob decides sending invitation to Jill&rsquo;s personal email. Jill decides which email address (</span></span><a href="mailto:jill@gmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@gmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"> or </span></span><a href="mailto:jill@hotmail.com"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">jill@hotmail.com</span></span></a><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">) is used as her personal email. </span></span></p>
<h2 style="MARGIN: 10pt 0in 0pt"><span style="color: #4f81bd; font-size: medium;"><span style="font-family: arial,helvetica,sans-serif;">Conclusion</span></span></h2>
<p><span style="line-height: 115%; font-size: 11pt; 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;"><span style="font-family: arial,helvetica,sans-serif;">When the offline people come online, they are shielding behind their identities. Over years, software systems are designed based on people&rsquo;s online identities. Due to the fundamental weakness of identity, those systems are running into problem when trying to resolve communication problems.&nbsp;<span style="mso-spacerun: yes;">&nbsp;</span><span style="line-height: 115%; font-size: 11pt; 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;">Ultimately</span>, 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. </span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>A Good Example of A Bad Design</title>
      <link>https://docs.microsoft.com/archive/blogs/dawei/a-good-example-of-a-bad-design</link>
      <pubDate>Sat, 07 Jul 2007 14:17:00 GMT</pubDate>
      <dc:creator><![CDATA[Dawei_MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dawei/2007/07/07/a-good-example-of-a-bad-design/</guid>
      <description><![CDATA[Two weeks ago, ProClub (a.k.a Microsoft gym) introduced a new lock system in the locker room, which...]]></description>
      <content:encoded><![CDATA[<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"></span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"><img height="320" width="400" src="https://blufiles.storage.msn.com/y1pAKiJRMzCMqsI_CEW2BA0NDFWi8TLnV9m2Dw8162OFN1ROB8s_w06-B-Hx7n1Q4oXyvF5Ba8F0Z4" alt="The New Lock" title="The New Lock" style="width: 400px; height: 320px;" /></span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"></span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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 &ldquo;G&rdquo;. 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? &ldquo;Few hundred&rdquo; she answered peacefully and said &ldquo;thanks for your patient&rdquo;. 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 &ldquo;G&rdquo;! 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 &ldquo;user error&rdquo;. I felt relieved and I know whom I should blame &ndash; the lock designer. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"></span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">What&rsquo;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.)</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"></span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">What&rsquo;s the design problem? I&rsquo;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. </span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"></span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">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.</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;"></span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">How to prevent this happen to me? I will program my life to prevent this happen to me again. Did I just say &ldquo;program my life&rdquo;? 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.</span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>Prototyping to Improve Design Accuracy</title>
      <link>https://docs.microsoft.com/archive/blogs/dawei/prototyping-to-improve-design-accuracy</link>
      <pubDate>Mon, 25 Dec 2006 00:13:00 GMT</pubDate>
      <dc:creator><![CDATA[Dawei_MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dawei/2006/12/25/prototyping-to-improve-design-accuracy/</guid>
      <description><![CDATA[How many times we realize that the software was implemented in the way very different from the...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">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&rsquo;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?</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">Let&rsquo;s give a real life example, say you are planning the trip to the following address:</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp; One Microsoft Way<br />&nbsp;&nbsp;&nbsp; Redmond, WA 98052<br />&nbsp;&nbsp;&nbsp; U.S.A.</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">I am pretty sure you will do a good and accurate trip plan by using tools like </span></span><a href="https://local.live.com/"><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">https://local.live.com</span></span></a><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">. But, what if I give you the following address (my home address in China)?</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp; Bi Tao Bei Yuan <br />&nbsp;&nbsp;&nbsp; Zhong Shan District, <br />&nbsp;&nbsp;&nbsp; Dalian, Liaoning 116001<br />&nbsp;&nbsp;&nbsp; P.R.China</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">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. </span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">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&rsquo;s fault. It is merely one of the characteristics of software development &ndash; 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. </span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">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 &ldquo;surprise&rdquo; if we have completed most of our code on top of that platform? </span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">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. </span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">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 &ndash; make software development more predictable. </span></span></p>]]></content:encoded>
    </item>
  </channel>
</rss>