Software Creation Mystery - https://softwarecreation.org

Author Archive

What can Software Development learn from the Iraq War?

Wired magazine published a very interesting article about change in US military philosophy during the Iraq war. US started with idea of Network-Centric Warfare:

The US military could use battlefield sensors to swiftly identify targets and bomb them. Tens of thousands of warfighters would act as a single, self-aware, coordinated organism. Better communications would let troops act swiftly and with accurate intelligence, skirting creaky hierarchies.

The Army committed more than $230 billion to a network-centric makeover, on top of the billions the military had already spent on surveillance, drone aircraft, spy satellites, and thousands of GPS transceivers.

Advanced technology helped to achieve quick victories – the opposing forces in Iraq (and Afghanistan) were broken in matter of days. But years of struggle to establish the new order came after these victories. Seizing territory and destroying enemy forces was not enough for the success. American military have learned from these failures and started to change approach recently. They realized importance of winning trust, minds and hearts of local people to win the war.

General David Petraeus, commander of Multi-National Force in Iraq, knows all about these mind games. He oversaw the writing of the new counterinsurgency manual. The book counsels officers to reinforce the local economy and politics and build knowledge of the native culture, “an operational code’ that is valid for an entire group of people.” And the manual blasts the old, network-centric American approach in Iraq. “If military forces remain in their compounds, they lose touch with the people, appear to be running scared, and cede the initiative to the insurgents,” it says.

Sometimes software development projects are closer to military operations than to the engineering process. The situation often changes, pressure is building up and quick decisions are required. The software system is the end result of these operations and developers are in the forefront. The software system campaign is not finished after the initial development is over: people start using the system, administrators support it and developers continue evolving it over time.

What skills can developers learn to contribute to the overall success of the long software campaign beside coming with technical solutions?

We often rely on technology, new tools and smart strategies to win our software battles. But at the end, people will decide the fate of the software. Should we teach programmers how to win minds of people who use their software in addition to mastering superiority in technology solutions?

Can Computers Beat Human Programmers? Part 5. Future of human programmers

Part 1. Gaining processing power
Part 2. Becoming intelligent
Part 3. Interacting with humans
Part 4. Building useful programs
Part 5. Future of human programmers

Computers don’t retire, overreact and complain. They could in minutes get all the knowledge accumulated by other computers. They could work 24 hours without making stupid mistakes. They make more and more human jobs obsolete. It is inevitable, computers will replace programmers in many areas. Even more, if Strong AI, capable of reasoning and understanding meaning, will appear, programming as a profession will be almost eliminated (at least coding part). Customers will be able to describe their needs directly to a computer. Computer AI will be translating these specifications to machine code (and stronger AI will require less formal specifications) and relentlessly building the software system.

Does it mean that that at the some point in the future software developers will no longer be needed? It could be true, if customers could specify exactly what they need and can effectively collaborate with AI to build the system. But things are not so simple, especially with non-trivial problems and humans (assuming that customers and users will be still humans). There are three roles that software specialists could play in the future even with powerful computer programming AI.

Read full post >>

Software Requirements Are Elusive: 6 Reasons Why Customers Cannot Get Them Right

Agile approaches insist that customer cannot come up with the reliable requirements at the beginning of the project. Martin Fowler provides four reasons:

  1. Software development is a design activity, and thus hard to plan and cost.
  2. The basic materials (technology and tools) keep changing rapidly
  3. So much depends on which individual people are involved, and individuals are hard to predict and quantify.
  4. In today’s economy the fundamental business forces are changing the value of software features too rapidly.

However, the most interesting reason is inside customers minds – they cannot reliably predict what they will need from software in the future.

Lets face inconvenient reality – most of the software ideas, decisions and requirements are not the result of scrupulous research, well prepared theories and mathematical models. If it were so, software development would take so much time, money and energy that it will almost eliminate any business benefits. Also it is very difficult to formalize anything related to irrational human beings (who accidentally are the main users of the software). In the most cases, software ideas are born from intuition, insights, copying other ideas and own experience mixed with some vague expectations. This empirical mess becomes source of the vision, requirements and future problems.

Customer dissatisfaction with software is the problem number one in software development. And the root cause is that many of customer’s expectations and predictions are in vain – mostly because future is fundamentally different than it appears in their thoughts. Why? There are six challenges that customers are facing to predict the future and get their ideas about the software right.

1. Subjectivity and our individual experience


alikaragoz
Software ideas are mainly based on our individual experiences, thoughts and understanding. Our individual experience is unobservable to everyone except ourselves. It is very difficult to communicate it right and completely understand other people. Translations and interpretations of software needs are unreliable – too much depends on what experiences we had, our memory and level of knowledge.
We see problems and possible solutions through lenses of our individual experience and often they shape and distort what we see. In addition, even if software customers can get objective view on their problems, they would see it from completely different perspective than domain experts, developers and end-users – people who shape ideas, build and use software. Subjectivity makes expression and understanding of software ideas very difficult.

Read full post >>

Self Organization: The Army vs. Jim Highsmith

Surprisingly, Jim Highsmith, respected agile guru, argues against one of the core agile principles of self organization, associating it with anarchy. On the contrary, surprisingly again, the Army experts, Don Vandergriff and George Reed, embrace ideas of adaptability and decentralization in traditionally command-oriented military units.

Jim Highsmith says:

“I’ve been thinking recently that the term “self-organizing” has outlived its usefulness in the agile community and needs to be replaced. While self-organizing is a good term, it has, unfortunately, become confused with anarchy in the minds of many. Why has this occurred? Because there is a contingent within the agile community that is fundamentally anarchist at heart and it has latched onto the term self-organizing because it sounds better than anarchy.”

Army experts say:

“A culture of adaptability is one that accepts a lack of absolute control over events on and off the battlefield. Implementation requires revisiting mission orders or trust tactics. It necessitates raising the bar in the education, training and coaching of leaders and soldiers. It seems trite to suggest that an adaptive institution will reward those who, when the need arises, act without waiting for orders, but this also necessitates a climate that is supportive of those who act and fail to achieve stellar results. Instead of seeking perfection or optimum solutions, operators will find a solution that works locally and then exploit those results as a continual evolution facilitated by an organization adept at receiving and communicating such information.”

Read full post >>

Can Computers Beat Human Programmers? Part 4. Building useful programs

Part 1. Gaining processing power
Part 2. Becoming intelligent
Part 3. Interacting with humans
Part 4. Building useful programs
Part 5. Future of human programmers

Is it easy to build useful programs for humans? Failure rates and dissatisfaction with the software projects (more than 50% still fails or challenged) show that it is not quite easy task. Can AI help to build more successful projects, compete and eventually replace human programmers?

From ideas to specifications

Human programmers face objective challenges in building software systems, which AI will face in the future:

  1. It is difficult to understand what people need.
  2. Customer’s ideas are shifting, once they start using the real system and experience all the consequences and effects for interacting with it in the context of their problems.
  3. Customer’s needs are changing constantly reflecting outside business and company trends, situation and problems.

Read full post >>

Lost Personalities: How our company alters us

– We’re sorry. It’s not us. It’s the monster. The bank isn’t like a man.
– Yes, but the bank is only made of men.
– No, you’re wrong there- quite wrong there. The bank is something else than men. It happens that every man in a bank hates what the bank does, and yet the bank does it. The bank is something more than men, I tell you. It’s the monster. Men made it, but they can’t control it.

– The Grapes of Wrath by John Steinbeck

Any company or large group of people is more than a sum of individuals. A company exercises control over people minds and changes them. Inside the company, organization or crowd you are no longer you, but the element of the system. You feel, think and behave differently. Collective actions are distinct and often independent of individual wills and desires. The scandal with Enron, tragedies of Abu Ghraib and Holocaust show how normal people minds could be dangerously influenced by group and context pressure.

Three stages of altering our minds:

  1. Compliance – agree with collective views or acts in front of the group, but disagree in private.
  2. Identification – temporary believe in collective view while being part of the group, but return to old beliefs after leaving a group.
  3. Internalization – the individual views are truly altered and induce permanent change in a value system even outside the group.

There are three powerful forces that change us:

  • Conformity
  • Obedience
  • Absorption

Read full post >>

Can Computers Beat Human Programmers? Part 3. Interacting with humans

Part of the inhumanity of the computer is that, once it is competently programmed and working smoothly, it is completely honest. – Isaac Asimov

Part 1. Gaining processing power
Part 2. Becoming intelligent
Part 3. Interacting with humans
Part 4. Building useful programs
Part 5. Future of human programmers

Even a super intelligent computer needs input from humans to build a program. It is great if you are a scientist or a computer professional and can provide mathematical models or algorithms. But what if you don’t know how to specify what you need from the program? Can computer really understand us? Can people trust computers to build a correct system for their needs? Will be communication with computer comfortable and effective?

We should consider four important software creation areas to answer these questions:

  1. Understanding – can computer comprehend our language and complex ideas?
  2. Engagement – can computer effectively involve us in communication?
  3. Guiding – can computer help us to understand our needs, direct our thinking and retrieve useful information?
  4. Trust – can we trust that computer will follow our human interests, obey rules and don’t do harm?

1. Understanding

Alan Turing offered the first test for computer intelligence – a computer is intelligent if you cannot distinguish in conversation this computer from human (John Searle argues in his Chinese room experiment that it is not enough). Computer should posses intelligence, master language and understand meaning of words to pass the test.

Read full post >>

Guide to Job Security for Software Developers: 15 Sure-Fire Methods

Job Security (my definition): perceived company’s losses of firing you are much higher than keeping you around.

I proudly present comprehensive collection of three sure-fire strategies and 15 sure-fire methods that could dramatically enhance your job security.

Read full post >>

Can Computers Beat Human Programmers? Part 2. Becoming intelligent

Intelligence is what you use when you don’t know what to do. – Jean Piaget

Part 1. Gaining processing power
Part 2. Becoming intelligent
Part 3. Interacting with humans
Part 4. Building useful programs
Part 5. Future of human programmers

Computers blindly follow our instructions. They are much faster than humans, but still computers are stupid things dependent on our algorithms and knowledge how to solve problems.
Even huge processing power is not enough to start programming. Non-trivial solutions require understanding of ideas, problem solving, learning from experience and much more – everything what we can define as intelligence. Can computers become smarter than human programmers?

What intelligence is required for building programs?

Read full post >>

How to Be Happy At Work. Short tutorial.

Then God said to Adam, “You listened to your wife and ate fruit from the tree. Cursed is the ground because of you. Through hard work you will get your food, every day of your life.”

This Adam curse continues and now – we have to work hard every day to earn our food. It is inevitable fact – most of us spend at work more than half of conscious adult life. How well do you spend this half of our life? Are you unhappy, stressed or bored on your job?

Why people are unhappy at work?

  1. Conflicts with other people and especially your boss. We all humans and, surprisingly not only you, but everybody has own agenda, interests and needs. Conflicts often happen, because we forget about this. Care about people around you and you’ll enjoy their company much more.
  2. Burnout – too much pressure, too much stress, too little time to think about yourself. Stress comes from inside – we are creators of own stress. There are hundreds ways to relieve – better organization, delegation of responsibility, better communication with co-workers. External factors are most important: enjoyment from family, home, physical activity and leisure, fulfilling personal life and achievements. At the end, we work to live, not living to work.
  3. Lack of variety and challenge. And first step to have interesting and enjoyable job is to design your job.

Read full post >>

Software Creation Mystery - https://softwarecreation.org
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License .