What makes a good software manager?

做为一个技术出身的管理人员, 很多能力都需要进一步进行提升.

这也是自己2008年的目标. 看到一篇好文章, 转贴在自己的Blog上, 共勉.

What makes a good software manager?

Mark I. Himelstein
Most software managers didn't start out as managers, but began their careers as developers.

Mark is a management consultant with 25 years experience in the software industry. You can check out Mark's blog at www.heavenstone.us.

 


 

 

Most software managers began their careers as software developers. They either had some ambition, some skill recognized as good management material, or were in the right place at the right time. No one I know who manages software was trained to be a manager.

 

Managers serve multiple masters: The customer, the company, their own manager, their employees, and themselves—and each will tell you what they mean by a good manager. You are stuck with balancing those efforts.

 

For instance, when I was interviewing for the job of running Solaris Engineering at Sun Microsystems, I asked my interviewers what they would consider success. The (somewhat strange) answer I got was that if they were better managed, it would be a success.

 

So here's what we have so far: You haven't been, and probably won't be, trained for a job that has too many bosses who either don't know what they want or want everything! What do you do? For starters, you go back to basics—execution, communication, and empowerment.

 

Execution

 

In the end, you, your team, and your organization will be rewarded if you develop and release software that customers need in a timely fashion. This is what I label as "execution."

 

Here are 10 questions involving execution that let you grade yourself:

 

 

  1. Do you have your customer's requirements?
  2. Do you have an approved budget?
  3. Do you have an approved roadmap?
  4. Do you have an approved schedule?
  5. Are you delivering the product on time?
  6. Do you hire developers in a timely fashion?
  7. Is your team capable of dealing with change?
  8. Are you capable of keeping your team focused and resisting change?
  9. Do your customers encounter a lot of quality issues with released products?
  10. Do you and your team measure how well you do your work on a regular basis to find ways to improve?

 

Someone once asked me what they should do when management wants something that is unreasonable or impossible. My answer had two parts: First you must ensure that management is informed and understands that this is unreasonable or impossible, and second, you must decide if you can disagree and commit. If you can't, then you need to examine your own career options.

 

While the second and more dramatic answer may have caught your attention, it is the first answer that leads us to the next basic skill—communication.

Communication

 

As a manager, you must communicate with each master you serve. For each action or event that affects you or your team, you should be thinking about to whom and how you communicate it. It doesn't matter whether the item is positive or negative.

 

You must also learn to communicate in different ways with different constituents. For example, you might do formal presentations for your boss's boss, but be more casual with your direct reports. Or you might use e-mail for officially documenting agreements between you and your peers, but need face-to-face meetings to explain that agreement with its rationale and implications to your developers.

 

Here is a second set of 10 questions with which you can grade yourself on communication:

 

  1. Does your team understand your company's strategy?
  2. Does your team understand engineering's roadmap?
  3. Does your team understand why the roadmap meets the goals of the strategy?
  4. Do you have regular communication meetings and e-mail with your team?
  5. Are people on your team willing to tell you bad news?
  6. Do you hear information about your team from your team before you hear it from others?
  7. Do members of your team communicate with each other and the rest of the company in a respectful manner?
  8. Do you provide information to your boss before he or she has to ask for it?
  9. Do other people in the company know what your team is doing and accomplishing?
  10. Do you communicate in a positive fashion?

 

How you communicate is as important as communicating itself. The attitude of your words, the respect for those with whom you communicate, the body language or inflection of voice, or choice of words all contribute to whether you communicate well. Cynicism, sarcasm, and negativity could remove all of the advantage you might otherwise realize by communication.

 

Unlike being a developer, a large part of your job is interacting with people. Just as my final words on communication reflect a care you must have in communication, you must also show care in how you treat your team and peers. I searched for the word that represents this skill, and "empowerment" came to mind.

Empowerment

 

You can't do it all yourself. You must develop an organization that breeds the next managers and leaders, and an organization that can focus, innovate, and succeed.

 

You should communicate requirements, work with your teams to develop plans, and then let them execute those plans. If you dictate plans or micromanage the execution, your teams will not succeed. They must feel ownership. Only you can make them feel ownership.

 

With this in mind, here are 10 questions on empowerment:

 

  1. Does your team develop and buy into their schedules?
  2. Do you avoid micromanagement?
  3. Do you delegate tasks and let your reports proceed without interference?
  4. Do you make it clear what your employees are accountable for?
  5. Do you provide leadership opportunities for your employees?
  6. Does your team have a sense of urgency in addressing issues?
  7. Do you set clear roles and responsibilities for your employees?
  8. Do all the members in your team know what they need to accomplish each week before they can go home for the weekend?
  9. Do your developers understand the difference between accountability and micromanagement?
  10. Do your developers consider your organization a positive work environment?

 

 

Empowerment also requires accountability. If you delegate without some checks and balances, you and your team may never accomplish your goals. Do not misconstrue accountability with micromanagement. Many developers take any accountability as micromanagement and you must disabuse them of that notion.

 

Here are some signs you are micromanaging:

 

 

  • Ignoring previously agreed upon reporting points and asking for status more frequently.
  • Getting angry with people for missing deliverables.
  • Constantly changing working assignments.
  • Dictating implementation instead of requirements.

 

You have to give people a chance to do their jobs in a positive environment. You need to look at problems as just things to be solved. You need to engender trust so you can get the truth when you ask for status. Empowerment also means letting your employees help develop their own schedules. While you can set a goal for a release, you must rectify any mismatches between the goals for the content of the release, the goals for the timeframe for the release, and the resources at hand.

 

You always have the same four things you can adjust in making a schedule—resources, features, dates, and quality. If you go back to the same thing each time you are planning a release in order to make your dates, your company can get out of balance. For example:

 

 

  • If you remove too many features, you won't have a competitive product.
  • If you add too many features, you won't make your dates.
  • If you scrimp on quality, you'll get a bad reputation.
  • If you wait until the product is perfect, you'll miss the market window.
  • If you make your engineers work extra hours all the time, they'll burn out.
  • If you add too many resources, you can run out of money.
  • If you slip the schedule, you make it hard for the sales team to sell and you might miss a market window.

 

When you define your product or release correctly and develop aggressive but accomplishable schedules, you may find resistance. The industry is so used to unreasonable schedules and unreasonable goals that many people will think your team is not working hard enough because there is no crisis!

 

Companies and their customers are best served by creating teams and products that can serve them over a long period of time. The sky is always falling somewhere. You should be aggressive and demand the best from your developers, but you should not abuse them as a resource.

 

Final Words

 

Obviously, each question posed here may spawn many more questions, and they may also have responses somewhere between yes and no. Take the time to answer them—and manage wisely. 

先展示下效果 https://pan.quark.cn/s/5061241daffd 在使用Apache HttpClient库发起HTTP请求的过程中,有可能遇到`HttpClient`返回`response`为`null`的现象,这通常暗示着请求未能成功执行或部分资源未能得到妥善处理。 在本文中,我们将详细研究该问题的成因以及应对策略。 我们需要掌握`HttpClient`的运作机制。 `HttpClient`是一个功能强大的Java库,用于发送HTTP请求并接收响应。 它提供了丰富的API,能够处理多种HTTP方法(例如GET、POST等),支持重试机制、连接池管理以及自定义请求头等特性。 然而,一旦`response`对象为`null`,可能涉及以下几种情形:1. **连接故障**:网络连接未成功建立或在请求期间中断。 需要检查网络配置,确保服务器地址准确且可访问。 2. **超时配置**:若请求超时,`HttpClient`可能不会返回`response`。 应检查连接和读取超时设置,并根据实际需求进行适当调整。 3. **服务器故障**:服务器可能返回了错误状态码(如500内部服务器错误),`HttpClient`无法解析该响应。 建议查看服务器日志以获取更多详细信息。 4. **资源管理**:在某些情况下,如果请求的响应实体未被正确关闭,可能导致连接被提前释放,进而使后续的`response`对象为`null`。 在使用`HttpClient 3.x`版本时,必须手动调用`HttpMethod.releaseConnection()`来释放连接。 而在`HttpClient 4.x`及以上版本中,推荐采用`EntityUtils.consumeQuietly(respons...
由于提供的引用内容未涉及在Linux系统中使脚本变得“干净且优秀”的因素,结合专业知识,以下是一些相关因素: ### 代码可读性 - **注释清晰**:为关键代码段添加注释,解释其功能和目的,便于后续维护和他人理解。例如在脚本开头添加注释说明脚本的用途、输入输出参数等。 ```bash #!/bin/bash # This script is used to backup important files in the /data directory ``` - **变量命名规范**:使用有意义的变量名,避免使用无意义的单字母变量。如用 `backup_dir` 表示备份目录,而不是 `d`。 ```bash backup_dir="/backup" ``` - **代码结构清晰**:合理使用函数将不同功能模块化,使脚本结构层次分明。 ```bash function backup_files() { # Function to backup files cp -r /data $backup_dir } ``` ### 错误处理 - **检查命令执行结果**:在执行关键命令后,检查其返回值,若失败则进行相应处理。 ```bash cp /source/file /destination/ if [ $? -ne 0 ]; then echo "File copy failed" exit 1 fi ``` - **捕获信号**:对常见信号(如 `Ctrl+C` 产生的 `SIGINT`)进行捕获和处理,避免脚本异常终止。 ```bash trap 'echo "Script interrupted by user"; exit 1' SIGINT ``` ### 性能优化 - **避免不必要的重复操作**:如在循环中避免重复计算相同的值,可将其提前计算并存储在变量中。 ```bash total=$(ls /data | wc -l) for ((i=0; i<$total; i++)); do # Do something : done ``` - **使用合适的工具和命令**:选择性能更高的命令,如 `grep` 比 `awk` 在简单文本匹配上更快。 ### 安全性 - **权限管理**:确保脚本以合适的权限运行,避免使用 `root` 权限执行不必要的操作。 - **输入验证**:对用户输入进行验证,防止恶意输入导致的安全问题。 ```bash if [[ ! $input =~ ^[0-9]+$ ]]; then echo "Invalid input. Please enter a number." exit 1 fi ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值