??xml version="1.0" encoding="utf-8" standalone="yes"?> 开发经理的职责?strong>保软g产品按时保质发布。流E也个目标服务, 但流E本w的作用很有限。Y件开发流E理论经历瀑布式,q代式(RUP, 又称l一软gq程Q以?qing)现在的敏捷开发(敏捷在现实中几乎是scrumQ,理论来成熟完善,但落地执行又不简单?nbsp;大量文章都在分析Z么敏hE在很多开发团队不起作用。比如最q看?nbsp;Z么敏捷开发在亚洲实行不了(jin) 里说Q?“敏捷开发需要大家当面直a问题所在,而这有?zhn)于亚z文化,因ؓ(f)亚洲人特别注意对别h表示重、给别h留面子,q一点与西方文化特别不同Q而西Ҏ(gu)是敏h想的发源地?#8221; 从自q亲nl历看,q纯属扯淡。讲到留面子Q和E泥,打太极拳Q老美一点儿也不输给中国人。流E只是个工具Q能否因地制宜执行得好,开发经理v到决定性作用。没有普适的程Q针对一个特定的团队Q只有合适的程?nbsp;全栈型的l理比较Ҏ(gu)领导团队做正的事情q做得够?/strong>?nbsp; 能做到这一点,是不是scrum都不重要。他不必在各个方面都是专Ӟ但至需要能预见技术上重要的风险才能及(qing)旉取措施处理。一些技术决定对目成|有关键性的影响Q比如技术选型Q搭Y件应用的架构Q包括分? 模块化,secruity, transaction, exception, auditQ自动化试{等。开发经理不必把q些工作都承担了(jin)Q但臛_需要把养I保证q些核心(j)的工作没有明昄漏。因为最lؓ(f)产品发布负责的还是开发经理自己,而不是某个犯?jin)错的程序员。不全栈Q把兌然就不全面?/p> 开发经理的各项工作中,我认为最重要的就是面试招聘。招对了(jin)人,工作中即佉K到棘手的问题Q技术好素质高的队员自己p决了(jin)?strong>团队不怕小但要_?/strong>Q队员必能独当一面。不论前台后端,l理臛_应该具备_好的技术品呌滤掉不合格的应聘者。乔布斯有个观点Q一旦招?jin)庸才,两年后,׃?x)轮到庸才做面试招聘,很可能再招进来的q是庸才。如果开发经理不全栈Q面试就要靠q气?jin)。反q来_(d)资历好而水q_的程序员Q也可以靠运气进好公司的?/p> E序员ؓ(f)story估时_(d)story pointQ的时候,?x)不会(x)虚报呢Q如果认为scrum的打牌可以避免虚报的话,可以看看上面关于留面子的讨论。即使把story的分配放在scrum打牌之后Q经常大家心(j)里已l知道哪个h做哪个story, 比如feature enhancement的story自然是这个feature之前的owner来做。打牌的人很Ҏ(gu)?#8220;做好?#8221;們于多估时间。(再说一ơ,q不是中国特Ԍ是h性)(j)?j)理学有个有的关于撒谎的讨论?strong>撒谎的前提是1. 我知?nbsp;2.你不知道 3.我知道你不知道?/strong>如果l理在品某Ҏ(gu)术上是小白,容易出C旉虚报的问?#8212;—q样的事情我亲见q很多次?jin)。全栈的l理自然不会(x)被糊弄?/p> E序员经怼(x)在一个技术问题上产生不同的意见,q很正常Q技术上很多事情本来p做取舍。这时候经帔R要开发经理介入做军_。经理做合理的决定不但对目重要Q对队员的个人感受也重要。决定不能是随机的选A或选B, 需要有军_的依据。程序员往往都有点小?jing)傲Q经理技术上捉襟见肘的时候,E序员就Ҏ(gu)惻I“你还不如我呢Q凭什么做军_?#8221; 开发经理需要做coding的工作么Q我认ؓ(f)是需要的?p里有句谚语, He that would command must serve。至也要做比较多code review的工作。评价队员工作效果是开发经理的重要职责之一。技术不全面的经理经怾靠听队员自我评h(hun)Q吹牛)(j)Q数代码行数{这U不靠谱的方式评价工作。错误地认同或不认同严重影响团队氛围。n先士卒的l理Ҏ(gu)长期保持住团队良好的氛围。我没有能力定义什么样的氛围才是好的Qv码,我带团队Ӟ成员互相之间?j)存善?/strong>?/p> 澄清一下自p点:(x)l理一定要全栈或技术精湛才能带好团队么Q不是,但是很多理的难题在全栈的经理眼里都不是问题Q?比如上面提到的评价队员工作。带不好团队无法好好职业发展么? 不是Q?我见q太多靠吹牛Qh事等各种非技术技巧成功哄骗二U三U经理的?jin)。管理的路越往上走Q技术越不重要,而政治越重要。问题是Q作为程序员或开发经理,你的目标是把目做好q是获得上认可Q?/strong>我觉得这是职业h(hun)D最Ҏ(gu)的分歧, 但, 不想讨论?/p>
]]>
]]>
]]>
猜想世界范围的开源项目沟通成本高Q所以他们必d方百计降低沟通需要,通过一些手D可以做刎ͼ比如
一Q清晎ͼ自然的架构?/p>
二,高质量代码,代码像文档一h畅?/p>
三,模块化,面向接口?/p>
四,务实的文档?/p>
五,自动化测试?/p>
…?/p>
有些沟通是必然免不?jin)的Q比如需求的沟通,我觉得最复杂的需求沟通往往起因于程序员不了(jin)解行业领域知识,而开源项目往往是工L(fng)Q框架类的项目,l大多数不涉?qing)特定行业领域知识,了(jin)解“domain”的门槛不高Q所以需求方面的沟通要求天生就相对较低。我们^时工作的很多沟通来自于技术问题的沟通,我绝不怀疑,技术手D能够降低沟通技术问题的需求,而一个不那么倚重E序员沟通技术问题就能把技术做好的目Q才说明技术风险低Q技术好。一些事情,比如技术选型Q的需要Involve比较多的论。但是当技术选型定Q模块划分清楚,接口清晰之后Q技术沟通的需求就应该比较低了(jin)。有的时候技术上?x)遇C些dilemma,q样写程序不好,那样写也不对Q有时候确实是因ؓ(f)技术本来也没有完美的解x案,总要trade off掉一些事情。但更多时候是因ؓ(f)架构不好Q才引发?jin)随后的U种ȝ(ch)。程序员之间扯皮什么事情该谁做Q是不是因ؓ(f)模块化做得不好?“xx,你给我讲讲某块代码实现吧Q我懒得看了(jin)”,是程序员懒还是程序实在是一团浆p,惨不忍睹Q同一个问题AlB解答一边,lC(j)解答一边,后面q有E,F,G?是不是早该写好文档?
coding的工作不圣Q但实不同的h做出的设计可以大相径庭,同一个功能背后的代码也可以天差地q。做产品不是靠h堆出来的Q三个臭皮匠不?jin)一个诸葛亮Q三个臭皮匠q不如一个臭皮匠Q因为安排一个诸葛亮可以带好一个臭皮匠Q三个臭皮匠能把诸葛亮也熏臭?jin)。开发团队应该是全高手阵营,Z必多Q但要个个而的强。玩儿开源项目的人都是有热情的程序员Q往往都是高手Q程序员用程序说话就好了(jin)Q电(sh)话不用天天打也不耽误沟通?/p>
跑下题说team work. 最q在惻Iteam work表面上看是相对于个h英雄M来说的,仔细一惻I其实个h英雄M应该是team work的前提。程序员是要有q样的本领,当他把手攑֜键盘上的时候,p源源不断创造h(hun)倹{一个h没单打独斗的能力Q就没资Dteam work, W蛋当然喜欢team work?jin),不然很容易暴露自q无知和无能?/p>
I mapped agile manifesto with the 12 principles based on my understanding below
The mapping may be debatable. But it is obvious that the first item, “individuals and interactions over processes and tools”, is the key. I only talk about the three of related principles that I think great practical guidance here.
1.Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
The software product is indeed a result of intelligence. The product leads to success if individuals are fully motivated. Individuals with passion not only do their daily work, they also strive to improve the way how they work.
Years ago, a manager in my report line said that, people has to work at least eight hours every day. The working hour is more than eight hours if the time spent on the way counts. No matter you admit or not, work is part of your life. To live a happy life, you should work happily in a positive way.
That word is very impressive to me. To go a step further, let’s say, the attitude to the work is part of the attitude to the life. While a good working environment encourages good attitude of individuals, one’s attitude contributes back to the environment.
2. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation
Communication is highly emphasized in agile. It is the first value of agile in Kent’s XP book. On one hand, it is so obvious that communication is important. We work off-shore. The communication is especially crucial between Beijing and HQ. On the other hand, we should notice the communication costs. It is said, people need 15 minutes to get back to fully concentrated status after interruption. So the cost is the time the communication lasts plus 15 minutes. People should get prepared before contacting others. And to communicate at a settled time can be a good idea. Actions are needed to improve the efficiency.
Because of the time difference, we usually communicate with HQ through mails. And because of the same reason, the communication efficiency can be badly impacted. For urgent/complex issue, we can use moc. Speaking of moc, the note part of moc can also be used to communicate. It is like a broadcast.
Consider this:
Suppose we have shared Windows resource. Someone needs to access to the environment. No surprise, he just logs on directly, then there is a chance to log off others by accident. If it happens, the poor guy sends message to all members “who kicked me off just now? ”A note on moc may prevent this problem. To put the current task/sub-task on moc is also good for co-workers and supervisor.
It is just a supplement to update-status meeting, not a replacement.
Don’t blame someone if his note is ‘listening to the music’.
3. Continuous attention to technical excellence and good design enhances agility.
Individuals need to improve themselves. It would be regretful if looking back for one year and find oneself have not grown at all. People should be open to the world outside. There are ways of getting information:
1. Skimming over tech news/views on some websites, like www.theserverside.com, www.javaeye.com.
2. To get information from others, especially from colleagues.
Almost every tech guy does the first thing. Surfing the internet and finding stuff one interests in. Just a step further makes the second thing happen. Others can get useful information from the sharing.
The way of sharing can be knowledge share and just share the material. Personally, I prefer the latter. I just don’t believe in one-shot knowledge share. For instance, even if it is Gavin King, the designer of Hibernate, giving a three-hour lecture about hibernate. You don’t expect to master hibernate after the lecture. It is great that we have a library in XXX. I’ve been thinking a web –based application, like douban.com, would help in the same way. People talk about e-books, tools, open-source projects and rate on them. What is more, people share stuff on the platform. There are some benefits over real library:
1. Interaction is easier.
People comment on the stuff, rate on them, exchange notes based on them…
2. It is cheap
Some of the books in the library are easy to find electric version on line. That money could have been spent on other good books. What is more, ‘copy and paste’ of e-book doesn’t cost.
3. It promotes good atmosphere.
I believe reading changes one’s insight, and changes one from inside. It can be great if staff in XXX love reading and sharing.
Other thoughts:
There are useful techniques in agile methodologies. Scrum is agile process, and it got popular fast in China. You may have noticed ‘process’is mentioned in way of “Individuals and interactions over processes and tools”. Scrum is surely not silver bullet. Though many practices in scrum work well in many companies, it is not necessary to work well in a given team/company. It can serve as reference. A team needs to adopt the process in a proper way. Process is important. The thought behind the process is even more important. Just do whatever helps improve the product and low down the risk. And it is agile.
Agile in XXX
In XXX, ‘never lay off people’is kind of a principle, though it is not written in employee manual. It does correspond to the ‘individuals’ principle in the manifesto. If people do not need to worry about losing their jobs, they get a chance to work with whole heart and soul. I’m glad to work in such environment.
To adopt agile methodologies, individuals are required to be highly qualified. People need to be efficient and work in a professional way. It is best practice to limit the number of team members in a team, which reflects the fact that each member is expected to contribute enough.
Both ‘never lay off people’and requirements by agile call for fully qualified employee. When I joined XXX, there was paper test. But that process was abandoned later. In my opinion, to be strict in hiring is important to every company. Especially for a company with humanism culture, like XXX. I’m not saying we’d better adopt paper test again. I think we do need some hiring process to be extremely strict.