The Ten Commandments of Egoless Programming

July 31, 2012 at 06:00 PM

From The Psychology of Computer Programming by Gerald M. Weinberg, this is a great list to have posted in any dev shop.

  1. Understand and accept that you will make mistakes. The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry, so we can, and should, learn, laugh, and move on.
  2. You are not your code. Remember that the entire point of a review is to find problems, and problems will be found. Don't take it personally when one is uncovered.
  3. No matter how much "karate" you know, someone else will always know more. Such an individual can teach you some new moves if you ask. Seek and accept input from others, especially when you think it's not needed.
  4. Don't rewrite code without consultation. There's a fine line between "fixing code" and "rewriting code." Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer.
  5. Treat people who know less than you with respect, deference, and patience. Nontechnical people who deal with developers on a regular basis almost universally hold the opinion that we are prima donnas at best and crybabies at worst. Don't reinforce this stereotype with anger and impatience.
  6. The only constant in the world is change. Be open to it and accept it with a smile. Look at each change to your requirements, platform, or tool as a new challenge, not as some serious inconvenience to be fought.
  7. The only true authority stems from knowledge, not from position. Knowledge engenders authority, and authority engenders respect—so if you want respect in an egoless environment, cultivate knowledge.
  8. Fight for what you believe, but gracefully accept defeat. Understand that sometimes your ideas will be overruled. Even if you do turn out to be right, don't take revenge or say, "I told you so" more than a few times at most, and don't make your dearly departed idea a martyr or rallying cry.
  9. Don't be "the guy in the room." Don't be the guy coding in the dark office emerging only to buy cola. The guy in the room is out of touch, out of sight, and out of control and has no place in an open, collaborative environment.
  10. Critique code instead of people—be kind to the coder, not to the code. As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc.

Permanent Link — Posted in Technology Management

2012 Cloud Computing Adoption Survey

June 26, 2012 at 06:00 PM

Rackspace has put out a nice infographic highlighting what IT decision makers are looking for as well as what they are concerned about when it comes to cloud.

Rackspace® — Rogue IT, Cloud Lock-In Dominate Cloud Concerns [INFOGRAPHIC] Rackspace® — Rogue IT, Cloud Lock-In Dominate Cloud Concerns [INFOGRAPHIC]

Permanent Link — Posted in Cloud Computing, Technology Management, Amazon Web Services

Adjusting IT for Cloud Computing

June 19, 2012 at 08:00 AM

Cloud Computing is not just a paradigm shift for infrastructure. IT operations, accounting and even staffing structure need to be updated to effectively harness the benefits.

In a previous article I illustrated deploying a multi-terrabyte RAID array in the cloud. That takes just a few minutes these days but it used to take most organizations over a month to provision that much storage through their IT channel. Moving to cloud will allow organizations to reduce and potentially eliminate IT staffing around procurement.

From an accounting standpoint, most IT departments are structured and budgeted around a list of services that they provide: server provisioning, incident management, resource monitoring, web support, database support, and infrastructure. These services to the business typically get rolled up into infrastructure OPEX. Actual integration support is often missed in terms of process, time planning, and accounting.

While some roles can be eliminated, there are new roles that need to be filled. As it gets easier to deploy into the cloud, it is important to put process and authority checks in place to avoid cost overruns and "server creep". Easy deployment allows IT operations to put more focus into integration support. This has given rise to the "DevOps" movement:

In computing, "DevOps" is an emerging set of principles, methods and practices for communication, collaboration and integration between software development (application/software engineering) and IT Operations (systems administration/infrastructure) professionals. It has developed in response to the emerging understanding of the interdependence and importance of both the development and operations disciplines in meeting an organization's goal of rapidly producing software products and services.
~ Wikipedia

Operating successfully in this new environment means adding integration support roles that focus on the interoperability between the infrastructure and applications, both during development and ongoing support. IT staffing needs to shift from hardware support to overall platform management and analysis, taking a consultative approach in building environments in which the organization's products can thrive. This requires gaining understanding and supporting the ecosystem of the business, which for some may require a different skill set than what they have currently.

Adopting a model of having dedicated integration support staff and infrastructure support staff will bring transparency to the true operating costs of the product or application. This increased visibility will allow for better planning for IT decision makers.

Permanent Link — Posted in Cloud Computing, Technology Management

Google Data Integration: Could It Drive PIDM Adoption?

January 26, 2012 at 09:45 AM

Interesting article from Forbes on Google's privacy announcement and how it will drive the Personal Identity Management industry.

http://www.forbes.com/sites/forrester/2012/01/26/google-data-integration-could-it-drive-pidm-adoption/

Personal Identity Management (PIDM), is heating up because of three factors:

  • The formation of large online networks that collect data about consumers (Google, Facebook, Zynga)
  • Web 2.0 technologies and trends to be open platforms creating access to that data
  • Increased consumer and government awareness of privacy issues

Picture a Personal Identity Management solution as a dashboard that shows you what these big networks know about you and enable you to update or edit it where the policies allow it.

Forrester Research has put out a report: Forrester Report on Personal Identity Management

The Forrester report asserts that: the consumer will be in control of their data; that solutions will emerge that help the consumer manage that data; and ultimately those solutions will be well-positioned to control marketing relationships.

While Forrester doesn't directly say this, I would argue that legacy industrial warehouses of consumer data like credit bureaus will not be able to hop on this bandwagon. They are not able to innovate quickly enough to keep pace with changes in data, data access and policy.

For entrepreneurs this means that the field is open for start-ups around PIDM.

Permanent Link — Posted in Social Media, Technology Management, Entrepreneurial

Human Nature and Managing Technology Teams

September 09, 2011 at 01:45 PM

Managing technology groups can be especially challenging. I attribute this to the way that technology attracts personality types that aren't as common in traditional business roles. Specifically I am talking about the type of people that founded and continue to support the stereotypes of the technologist - the introverted, over-calm, over-ego'ed nerds and geeks.

Darwin's Theory of Human Behavior suggests that we are all motivated by four drives: to acquire, to defend what we have acquired, to understand/comprehend the world around us, and to bond socially.

Technologists are a little bit of a different breed. Part of what motivates technology people is making it better: the interface, their programming code, the world. They want to know they are making a difference, even if it's at a personal and not global level. I don't think this specific motivation can be attributed to just one of the Darwin drives - but works across all of them. Making it better is a quest to acquire new knowledge or capabilities, better-preserve existing knowledge/capabilities, yield new or clearer understanding, and gain socially through being recognized for the accomplishment.

Harvard researchers performed a survey among the workforce to test Darwin's Theory. Their results were published in Harvard Business review and this month in Harvard Magazine. The study showed that the four drives explain about 60% of motivation for employees, but more importantly that if just one drive wasn't satisfied in the person's job, it pulled down their job satisfaction in all other categories. The best results correlated with all four drives being fulfilled simultaneously.

Computer systems are logical things and that is a natural attraction for people who fall into the NT range of the Myers-Briggs personality type. Logic and strategy are strengths of NTs, and they value truth, knowledge, competence and autonomy.

Typical technology people highly respect authority figures that they see as deserving of their positions. However, Myers-Brings and Carl Jung point out that NT thinkers disdain poor and unmerited leadership. This is mainly due to the fact that NTs have a natural leadership ability and tendency, but they are introverted and reserved. They prefer to work behind the scenes but can emerge as effective leaders when they feel that the business objective would be failed otherwise.

A big key to motivating technology teams that many managers miss is filling them in on the big picture. This goes a long way with the team because it allows them to plan for the intermedite and long-term. Without understanding the strategy of the company they work for, technologists will see their leadership as erratic and ineffective.

Recognition is another area that is often overlooked. This isn't just an "atta boy".

Your technology team should be looked at and even touted as an asset where appropriate. Buy them lunches, give them perks, and let them take time off outside of the company policy if they work overtime.

Like many things, communication and understanding are keys to success in managing technology teams. I create highly effective teams by hiring competent people and laying out the strategy as well as the technology philosophy. This gives employees a compass on which to base their decisions and solutions, ensuring their efforts and contributions are in-line with the needs of the organization.

Permanent Link — Posted in Technology Management