Software Creation Mystery - http://softwarecreation.org

Archive for the ‘Concepts’ Category

Should An Effective Developer Innovate, Imitate or just Integrate?

in·no·va·tion – introduction of new things or methods
im·i·ta·tion – the copying of patterns of activity and thought of other groups or individuals
in·te·gra·tion – an act of combining into an integral whole.

What is the best strategy for an effective developer – innovation, imitation or integration? Should you introduce new creative solutions, adapt other people ideas or just integrate existing components?

Software Development is an exciting intellectual endeavor without physical barriers. It is easy to start innovating – come up with new ideas and quickly submerge into their implementation. And I don’t mean here fundamental breakthroughs. I consider as innovation building of any non-trivial solution that is not directly stemmed from Google search results, development resources or available examples. And certainly, I pose the dilemma – innovate or not innovate – to skillful developers who are quite capable to innovate and who enjoy meaningful creative work.

Read full post >>

When should you Release Early and Often?

Jason Cohen posted an interesting and provocative argument against Release Early, Release Often principle followed by many agile teams.

His main points:

  • Ideas. The best ideas are not coming from users and they are bad in providing feedback (iPod). So, there is no point to release early to get their opinion and ideas.
  • Features. Minimal early set of features could be unattractive for majority of users and will turn them down for future use (Apple Newton)
  • Quality. A buggy and unpolished product could ruin your reputations
  • Architecture. An incorrect initial architecture creates waste and serious problems down the road (Netscape, Twitter)

Therefore, Jason against releasing early and often. I don’t agree.

My answer: it depends!

Evolution is the process of small frequent changes to improve and adapt to environment.

Read full post >>

How to rescue failing software projects: The Toyota Way

The manager slams a door and tells us that we are in a big trouble. Our old customers complain about many bugs and bad performance, new customers complain about delays and lack of dedication. And, top management considers our department financially unsustainable and wants to deeply cut expenses.
The manager tells that we are brilliant programmers, work very hard and create cool software solutions. But there is something wrong and we cannot work this way anymore.

Anxiety started to penetrate our souls. We know what is wrong: our team is short of people, we have too many commitments, our code is becoming a big mess, new technology and our new software version makes something bad with servers. A snowball of different problems makes us stressed, distracted and incapable of productive work.

What could our manager do next?

  1. Distrust. Become a dictator, make own decisions including hiring external consultants to recommend what to do or even replace us. However,
    • we are good programmers and know our business well – the problem is not in lack of skill and knowledge
    • external people will take a lot of time to understand the system and they will have different motivation and won’t care about the long-term success
    • people will be demotivated and the manager cannot make effective decisions without active team involvement
  2. Faith. Give to team the full power to fix a problems and make own decisions in hope that smart people, motivation and technical expertise will do magic. However,
    • fresh outlook and thinking out of box are hard when a team immersed for a long time into difficult situation
    • a team possibly doesn’t have understanding and control over external forces – management, customers, finances
    • changing of reality is tough (especially in people heads) and requires more than technical experience

There is a third way. Place improvement practices in the core of development process. Make self-improvement inevitable and required for any activity. Do it every day.

Toyota Way is the best example of large-scale reliable self-improvement process. It focuses on eliminating waste, solving problems at root cause and making right decisions. Toyota Way reduces problems, increases internal efficiency and makes a company successful. This is the best receipt for coming out of crisis.

Targets:

  • Problems - emergencies, fires that require immediate fix: bugs, server crushes, deadline slips
  • Waste - inefficient and non-value adding activities: waiting, misinformation, stress
  • Challenges - adaptation to external forces (market, competitors, customers, society): new trends and technologies, changes in users expectations for user interface and functionality

Read full post >>

Reliable Software Development Process: The Toyota Way

A software project is a creative, unique and therefore unpredictable endeavor. We are not building the same thing over and over again, but solve new problems, address increasing demands and use perpetually changing technologies. Under these conditions, people – smart, creative and productive – are the most important factor of success . Software development process can only support and compliment these people, but it cannot guarantee success alone and make the factor of people negligible.

But, business wants predictable, reliable and successful results. I bet they don’t want to be at mercy how cards are shuffled in their talented development team. The answer is in establishing a process that increases chances of success and aligned with present nature of software development (unpredictable, empirical and heavily dependent on people).

The Toyota Way can be a great example that worth to learn. Toyota evolved from a small looming equipment shop to the largest car manufacturing company. The main foundation of successful growth is the system of few core principles that enables best quality, high productivity, lowest cost, shortest time and long-term success.
Read full post >>

What do programmers really do?

Computers are useless. They can only give you answers. – Picasso

Many people (including my mother-in-law) think that computers are becoming so smart that programmers will be no longer needed in the near future. Other people think that programmers are geniuses who constantly solve sophisticated math puzzles in front of their monitors. Even many programmers don’t have clear idea what they do.

In this post I want to provide some explanation to uninformed people what programmers really do:

Programmers are translators of human ideas into the language of computers.

They are a link between two worlds – human and computers. Do you think it is easy to maintain this link?

Read full post >>

How to become an Expert. Embrace Reality.

Reality is merely an illusion, albeit a very persistent one – Albert Einstein

An expert have much better models of reality and methods to build them than an ordinary specialist. The expert, armed with these models, can quickly put pieces of a problem puzzle together, find explanations and solve the problem.

Models can be related to anything – software systems, business domain or your personal relationships. Read full post >>

The Elements of Pragmatic Programming Style. Composition.

A really great talent finds its happiness in execution.Johann Wolfgang von Goethe

source

Qualities of well composed code:

  1. Quick discovery and understanding of programming logic and components
  2. Clear organization (for human brains)
  3. Ease of reuse, modification and evolution
  4. Close connection between customer ideas and system implementation

Read full post >>

The Elements of Pragmatic Programming Style. Approach.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. – Antoine De Saint Exupery

The approach to programming is concerned with finding the best ways to translate programmer’s intention into the good system design and code.

The programming is communication. The programmer continuously add, change and refine ideas in the code. Source code has two important goals: tell a computer what to do and tell people what the computer should do. The program code is the only true medium for storing and communicating ideas about the software system behavior. Quality of the ideas expression in the code directly affects overall quality of the system.

So, what are characteristics of the good code?

  1. clear - easier to work with ideas;
  2. minimal - less effort to understand and change ideas;
  3. testable - easier to validate ideas.

These are 6 top reasons for bad design and code:

  1. lack of expertise
  2. unrestrained technical curiosity and creativity
  3. missing big picture: system purpose and customer goals
  4. blindly following popular methods and over-using technology
  5. sloppiness; lack of attention to details
  6. over-complicating design to have more work or increase job security

The programmer can write better code (and avoid most of these problems) by improving programming style and approach.

Read full post >>

Selecting The Best Strategy for Software Teams: Retreat, Evolution or Revolution

“If you do not change direction, you may end up where you are heading.” – Lao Tzu

Software teams have three main strategies to achieve success: retreat, evolution or revolution.

  • Retreat – refusal to act or the art of knowing when to say NO. 
  • Evolution – continuous improvement and generation of ideas stemmed from existing set of ideas.
  • Revolution – rapid advance with radical and disruptive ideas, overhaul of existing core ideas.

How can software teams choose the best strategy? They should consider three components:

  1. The Players
  2. The Game
  3. The Dynamics

Read full post >>

Ideas in Software Development: Revolution vs. Evolution. Part 1.

What does produce better ideas in software development – revolution or evolution? Revolution is a rapid triumph of the new ideas and breaking open of the old concepts. Evolution is the process of small frequent changes to improve and adapt to environment. The main difference – revolution replaces old ideas with the new promising unproven ideas, evolution gradually and continuously improves existing working ideas.

We often face this dilemma in software development – should we enhance existing features and improve the ways we work or should we instead come up with something radical and revolutionary.

Read full post >>

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