A simple question
Agile Coach: OK. A professional takes responsibility and is an openminded lifelong learner.
P: Yes. A professional knows what to do and does it.
Agile Coach: That sounds a bit mercenary. It somehow feels wrong to me. Is there no more to being professional?
P: (Embarrassed silence. Then) Let me think about it and I’ll have the answer by next week. Is that ok for you?
Agile Coach: Yes. I want to become a good professional.
What is the acceptance test for “a professional”? How can we recognise one? What are the essential characteristics of a professional?
Acceptance criteria #3: A professional acts ethically according to values
A professional acts according to a Code of Ethics
The ACM and IEEE have a Code of Ethics for Software Engineers. Here is the short version:
Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles:
1. PUBLIC – Software engineers shall act consistently with the public interest.
2. CLIENT AND EMPLOYER – Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.
3. PRODUCT – Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.
4. JUDGMENT – Software engineers shall maintain integrity and independence in their professional judgment.
5. MANAGEMENT – Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.
6. PROFESSION – Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.
7. COLLEAGUES – Software engineers shall be fair to and supportive of their colleagues.
8. SELF – Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
Copyright (c) 1999 by the Association for Computing Machinery, Inc. and the Institute for Electrical and Electronics Engineers, Inc. Read the the full version
Read the short and the long version. Replace ‘Software engineer’ by I. Does this code of ethics apply to you?
A professional acts according to a set of Values
Daniel Dennett shows in “Darwin’s Dangerous Idea” that we don’t have the time or resources (or even the techniques) to completely analyse our ethical dilemmas. Rules and values offer convenient shortcuts to quickly resolve dilemmas in a reasonably good way.
That’s why I try to act according to a set of Agile Values.They act as warning lights for potential problems.
Communication
Of course, we talk a lot, write and read a lot of documents. But do we communicate well? Do all stakeholders of our project talk the same language, use the same metaphors and have a common vision? Do we verify if we understand others, for example by using the “9 boxes” interview technique?
Collaboration
Of course, we’re all in the same room (except for the testers and the systems engineers and the support team and…). But do we all really collaborate? Do we have common goals across the whole value chain, including partners and suppliers? Are we all aligned towards that common goal? Do we succeed and fail as a team or am I rewarded for personal successes?
Feedback
Of course, we always work with short iterations. But have we built in mechanisms to give us rapid and regular feedback? Do we steer our project based on the feedback? How long can we afford go “steady as she goes”? Is our feedback cycle shorter than that? What do we do when our feedback mechanisms give us bad news?
Simplicity
Of course, we know about YAGNI and DTSTTCPW. But do we really work to keep things simple? Do we invest the refactoring time and effort to keep our software simple and malleable? Do we reflect and adapt our processes to keep them simple, lean and efficient? Do we relentlessly strive to make everything simpler?
Quality
Of course, we know that “Quality is Free“. But do we really believe that? Do we keep our standards for quality high when we’re under pressure — especially when we’re under pressure? Are we tempted to take shortcuts and “fix it later”? Do we support each other to resist the pressure to do things “slow & dirty”? Do we welcome issue reports and perform root cause analysis so that we can implement Jidoka and Poka Yoke?
Respect
Of course, we all respect each other. That goes without saying, which is why this value was left out of the original Agile values. But then why do we still see deathmarches? Do we respect the value that each team member brings to the project? Do we respect the ‘other’ teams with whom we have to collaborate?
Trust
Of course, we trust each other. But, do you really trust everyone on the team to make correct changes to your code? Do the developers really trust their management’s judgments and decisions? Do managers trust their team’s estimates and technical choices? Do we trust the onsite customer’s choices and priorities? Do we trust that everyone on the team will take responsibility? Always?
Transparency
Of course, we’re transparent; you just have to come look at our whiteboard and burndown chart. But do we really make all information visible, including the bad news? Do we really share the project risks with everybody involved, including the customer?
Do I Pass the Test?
There are few people who would dispute the ‘goodness’ of these values or the code of ethics guidelines, yet they’re hard to follow. We’ve all seen people who’ve compromised these guidelines under pressure. We’ve all been in situations where we were at least tempted to compromise or lacked the courage to stand up for our values. I certainly have.
Read the the full version of the code of ethics and ask yourself: do I pass all of those acceptance tests?
What can I do today to improve my ‘score’?
What small step can I take today to become more professional?