正在策划一个产品,其中要用到企业中人员的上下级关系。

上下级关系,直觉上只是个简单的树状结构,如果不深入思考,容易将之简单化,其实,这里面还是有很多麻烦事的。例如,有些企业,某些人的上级不止一个,属于多领导,虽然有些口头上的分工,但分工并没有非常明确,还有的时候,一个人可能会有兼职,如某车间主任兼职工会主席,他就属于两个不同的管理条线下,还有些企业,对排名,特别是领导的排名很重视,可在兼职的情况下,在不同的岗位下,排名是不一样的,等等。

怎么表达企业里面员工上下级的关系,兄弟们主要分成了两大阵营,相互之间都说得有道理。

方案A:就直接用人表达上下级关系,至于这个人的岗位是什么,只当成一个不重要的辅助信息。这样做的优点,一,可以清楚地表达出谁是谁的领导,谁领导谁,一目了然;二,符合我们在工作中的认知,我知道我的领导是谁,至于他的岗位是什么,我并不太关心;三,如果用岗位表达上下级,对于那种事业部的组织架构,可能几乎需要对每个员工设置一个岗位。

方案B:用岗位来表达上下级的关系,岗位A的上级是B岗位,如果某个员工属于A岗位,那么他的上级就是B岗位的员工,谁在B岗位,谁就是他的领导,如果B岗位有多人,意味着,他的上级有多个。这样做的优点,一,如果有多个员工属于同一岗位,在实施的时候就不需要为每个人都设置他的上级;二,如果某员工离职(特别是管理者),对组织架构没有任何影响,只要将个别员工设成这个岗位就行了。

争论了很久,最后方案B获胜,产品经理决定采用。因为方案B方又抛出了两项优势,一,用岗位表示上下级更符合HR的思维,在实施项目的时候,跟HR讨论更容易,也就更顺畅;二,透过现象看本质,现在社会并不是养家臣的年代,人跟人之间的上下级关系,并不是人的关系,而是岗位的关系,你是我的领导,因为你在这个岗位,软件要表达现实业务才能提高灵活性。

最后,做个总结吧。为了让软件具有更好的可扩展行、可维护性、灵活性,要尽量表达出业务的本质,因为业务的本质变化的概率小,而表象变化的可能性大,也更可能遭遇难以处理的异常情况。

上例中,岗位的上下级关系是本质,人跟人的上下级关系其实是表象。企业中上下级的岗位关系是相对固定的,只要没有组织架构的变更,一般不会变化,可人跟人的上下级关系变化的可能性大得多(如离职、升职、调动等)。

如果软件表达的不是业务的本质,而是表象,那么很有可能在使用中会遇到某些你现在无法预见的、无法表达的特殊情况。例如,假设某人兼职两个领导岗位,车间主任(上级是制造总监)与工会主席(上级是行政总监),车间组长的上级是车间主任,所属高管是制造总监,而工会会计的上级是工会主席,所属高管是行政总监,这时候,方案A是无法表达这种关系的。方案B很容易表达出这种关系:

如果采用方案A,如图,李会计与钱总,孙组长与赵总的关系无法表达出来。


作者:杨长春
首发于微信公众号yang_changchun
更多关于管理软件需求分析的经验与技巧,请参见作者著作《实战需求分析》(清华大学出版社)

软件设计:表达组织中的上下级关系相关推荐

  1. 软件设计之UML的几种关系

    在软件开发中,经常会遇到UML建模,而类图作为一种静态的结构图,不仅是系统编码和测试的重要模型,还可以简化人们对系统的理解.因此,理解和知道如何使用UML图就显得尤为重要! UML类图的基本符号 UM ...

  2. 软件设计模块之间7种耦合关系

    一般来说,模块之间的耦合有七种类型: 1.根据耦合性从低到高为非直接耦合.数据耦合.标记耦合.控制耦合.外部耦合.公共耦合和内容耦合. 2.两个模块之间没有直接关系, 它们之间的联系完全是通过主模块的 ...

  3. 软件设计中的一些原则

    本文为大家介绍软件设计中的一些原则,都是经过长期经验总结出来的知识,每一个程序员都应该了解,相信对大家在进行软件设计的过程中会有很大帮助. Don't Repeat Yourself (DRY) DR ...

  4. 软件设计过程中的诱惑

    在软件设计的过程中,我们经常会面临这样的诱惑: 在工作过程中,突然出现了一个问题如鲠在喉,阻塞住了当前整个的工作进度, 而同时,你立刻能够想到一个快速搞定该问题的方案,这种情形下开发人员,很 容易就会 ...

  5. 【文献翻译】软件设计级漏洞分类模型-Software Design Level Vulnerability Classification Mode

    摘要 软件安全漏洞的分类无疑有助于对安全相关信息的理解,并加速了对漏洞的分析.缺乏适当的分类不仅阻碍了对它的理解,而且还影响了为集群漏洞设计缓解机制的策略.现在,软件开发人员和研究人员都认为,软件的需 ...

  6. 软件设计美学之道第2回─软件的美丽元素─设计思维

    世界上大大小小的事件.每个人的想法.做法,只要不是具象的事物,就都是抽象的,而软件设计的思维亦是如此. 在软件设计的领域中,对象导向的设计方式是个抽象的分析思考法,很适合在虚拟世界里面表达出真实世界的 ...

  7. 基于文档对象模型的软件设计

    基于文档对象模型的软件设计 文档对象模型是一种较为抽象的系统设计模式,就是将要处理的信息进行整理和抽象,运用面向对象软件设计方法,确定各种信息的组织关系和继承关系,形成一种树状结构来精确描述业务数据. ...

  8. 一些软件设计的原则【转】——本来想自己总结,结果发现个更全的,

    本文为大家介绍软件设计中的一些原则,都是经过长期经验总结出来的知识,每一个程序员都应该了解,相信对大家在进行软件设计的过程中会有很大帮助. Don't Repeat Yourself (DRY)  D ...

  9. 【软件设计】细数软件开发的核心原则

    软件设计有两种方式:一种是设计得极为简洁,没有看得到的缺陷:另一种是设计得极为复杂,有缺陷也看不出来.第一种方式的难度要大得多. --<皇帝的旧衣>,CACM 1981 年 2 月 C.A ...

最新文章

  1. SQL:使用备份向导、SQL命令、导出数据三种方式对已建立的数据库进行备份
  2. Codeforces 1276C/1277F Beautiful Rectangle (构造)
  3. 电气期刊论文实现:考虑排放目标和输电损耗的经济调度【有代码】
  4. node nest 框架学习(一)
  5. 用matlab建立控制系统的数学模型,第二章控制系统的数学模型.ppt
  6. #if/#else/#endif
  7. 信息学奥赛一本通C++语言——1127:图像旋转
  8. Win10 64位安装SQL2000(个人版)
  9. 【DFS笔记】对dfs(index,状态)一类问题的思考
  10. ins与apache的区别_既然nginx比apache快,为什么nginx没有取代apache?
  11. java中的构造函数
  12. Extjs4.2里Grid显示日期类型数据
  13. 清空数据库里面所有表的数据的语句
  14. Proteus仿真C51利用双定时器输出占空比可变的PWM
  15. 网络蠕虫和僵尸网络等恶意代码防范技术原理
  16. 硬盘分区怎么不删除文件合并_硬盘分区怎么合并?
  17. ROS通信机制~话题通信(PublisherSubscriber)·笔记2
  18. php strpos 区分大小写么?,PHP strpos() 函数
  19. vue安装node-sass错误
  20. 程序猿成长之路之密码学篇-DES介绍

热门文章

  1. 前端路由和后台路由有什么区别?
  2. JS 入门经典 第三章 判断、循环和函数
  3. 使Tomcat可以下载中文文件
  4. JSP的9个内置对象-application
  5. Spring事务详解与使用
  6. css compressor java_利用YUI Compressor压缩JS/CSS之终极秘籍
  7. linux操作系统桌面应用与管理第2版,linux操作系统桌面应用与管理(62页)-原创力文档...
  8. 域中计算机与用户,域内计算机和用户获取实现vbs代码
  9. esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
  10. 秒懂物理计算机出题规划,57张动图, 让你秒懂高中物理原理! 考试次次拿第一