Software Creation Mystery - http://softwarecreation.org

Can Software Team deliver like McDonalds?

McDonald's

What does a customer wants?

Usually your customer wants to know a simple thing – when your team will deliver working software based on agreed requirements. They naively want to safely bet on highly uncertain future outcome – delivery of the complex never created before system that completely fulfil their dreams.

The customer wants reliable McDonalds experience, but with a little tweak – they want to hand in their own exclusive menu, often created by people who don’t have any idea how to cook.

In short, the customer requires creative flexibility of Cooking Master Chef fortified by ability to predictably deliver hamburgers as McDonalds.

But, is it possible in our development reality to chase two opposing goals – Predictability and Flexibility in the same time?

Read full post >>

Stuck on a Big Hard Programming Task? Read this!

Sometimes I am stuck on a mind-boggling task. I know this because I found myself fiddling around, giving advises to other people, searching for food, drinking coffee or working on low priority stuff. Clock is ticking but little gets done. After I notice this unfortunate state, I talk with myself seriously – calling to conscience, sense of duty and pride of a man who never fails his mission and the team.

Over the time I have learnt how to return to a productive state and even finish difficult tasks. I want to share my experience here.

Precondition
I assume that you have a good idea what you should build. If not, you have to get back to your notes, client or a drawing board. You definitely will be unproductive if you don’t have clear understanding of your task. Most probably you will waste your time and client’s money.

Now, you know what to do but don’t know how and intellectually overwhelmed by this too big to bite piece!

I recommend 3 phase strategy to conquer your difficult task:

  1. Hit the road – start moving and build the confidence
  2. Take control – conquer uncertainty and map the road
  3. Accelerate – drive on full speed while keeping control Read full post >>

Three Spirits in The Soul of a Software Developer

I noticed that three spirits are fighting in the soul of a software developer – Great Artist, Reliable Worker and Selfish Pragmatist.

Great Artist

If you hear a voice within you say, ‘You cannot paint,’ then by all means paint, and that voice will be silenced. – Vincent van Gogh

The first spirit is a Great Artist who pushes our fellow programmer to work on challenging tasks, invent new approaches and seek for self realization. The spirit gives power and desire to create state of art solutions and move forward with learning and practice. The Great Artist spirit is behind the best software; it makes the developer to think out of box, strive for beautiful code and forget everything outside the problem. It is powerful spirit but dangerous for ordinary business – there is no predictability and assurance that developer will remember what client really needs. The developer driven by this spirit tend to reject mediocre, but good enough solutions, will do stuff his own way and go far beyond what is necessary. This developer has zero tolerance to poor code and will refactor most important pieces of code even night before important demo… after testers go home to sleep.

Read full post >>

How to Meet Challenges with Systems Thinking

A. Life Challenges and Systems

Your life continuously presents new challenges. And your success directly depends on your ability to meet these challenges. You can choose various approaches – react on problems as they come, appeal to supernatural forces or seek for advise.

But how many times

  • you didn’t understand why thing happen and what to do
  • you found that reality and challenges are more complex than they seem
  • your solutions create new problems and make things worse

Welcome to the messy world of complex systems that encompass your life and compose our Universe.

1. You can be the master of your life if you can understand and influence systems involved in your challenges. That means that you should become the Master of Systems Thinking.

However, it is daunting task to understand and use the systems around you. That is why many people stuck without career growth, cannot achieve their top level or stop pursuing big goals. They gave up attempts to master systems that drive our projects and life.
Read full post >>

The Toolkit for Increasing Productivity of Software Teams

Seasoned project managers will tell that delivery of software is result of many trade offs. The main trade off is between Time (when project will finish) and Scope (how much will be done). This post will show that using right tools you could gain improvement for both variables.

While it is possible to create orderly step-by-step process for increasing productivity of software teams, it will never be ideal – too many variations and situations will hinder it usefulness. I believe in set of useful tool that could be combined to craft custom optimal solution.

Strategies

There are several strategies that lead to increase in productivity – how many units of scope software team can produce within fixed time.

  1. Increase Capacity (Capacity) - increase capacity by hiring more people or increasing work hours
    • productivity is increased as result of more resources and hours available
  2. Improve Value Stream (Value) - increase added business value on each step and reduce waste and overhead
    • productivity is increased as result of optimized delivery of value
  3. Adaptat to Reality  (Adaptation)- learn from practice and mistakes, validation of ideas by reality, adapt to changing situation
    • productivity increased as result of early corrections and improving how things are done
  4. Empower Individuals (Individuals) - boost people knowledge, skills, morale and focus
    • productivity is increased as result of higher individual performance and motivation
  5. Enhance Communication (Communication) - improve communication and mutual understanding inside and outside of the team
    • productivity is increased as result of availability of necessary information, clarity of what should be done and exchange of ideas for implementation
  6. Organize Better (Organization) –  structure team and assign roles for better coordination and decision making
    • productivity is increased as result of better decisions and focus on important areas
  7. Expand Expertise (Expertise) - increase range of skills and services offered by team
    • productivity is increased as result of better execution of necessary project activities
  8. Scale Externally (Externality) – outsourcing and involvement of external communities
    • productivity is increased as result of involvement of more people outside of team
  9. Tame Complexity (Design) – manage complexity and provide simple and well designed solutions
    • productivity is increased as result of reducing complexity burden on software development
  10. Preserve Quality (Quality) – use defensive tactics to ensure high quality
    • productivity is increased as result of preventing system flaws and reduced effort to fix bugs
I separated tools into three categories:
  • People-oriented – people are the creators of software and have major effect on output
  • Process-oriented – the way how people work has significant impact on outcome
  • Development-oriented – development practices and approach to the system implementation matters a lot

Read full post >>

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 >>

How to Become an Expert: Creative Problem Solving

“Ideas are like rabbits. You get a couple and learn how to handle them, and pretty soon you have a dozen” – John Steinbeck

Your success in life mostly depends on two things – luck and ability to solve problems. I would leave luck topic for Irish tales and concentrate on the topic of creative problem solving.

Any active person constantly facing many problems and challenges. For example,
  • Improving relationship
  • Flying to space to be the first man on Mars
  • Overweighting and health problems
  • Winning bodybuilding or beauty contest.
  • Procrastination
  • Learning new technology
  • Making more money
  • Building next Facebook or Twitter
  • Raising kids
  • Boosting career growth
  • Becoming Olympic champion or billionaire
  • Making the world a better place
  • Planning a dream vacation
  • Seeking for happiness…

We often are inconsistent in solving problems and cannot find a good solution. This post focus on effective and creative problem solving by offering systematic approach and wide range of techniques.

Read full post >>

How to Become an Expert: Creativity

cre·a·tiv·i·ty -the ability to transcend traditional ideas, rules, patterns, relationships, or the like, and to create meaningful new ideas, forms, methods, interpretations

Creativity can be developed and improved. Here is my Theory of Creativity in 3 parts

  1. Prepared Mind – prepare your mind to be creative
  2. Right challenges – know what challenges you should embrace now
  3. Creative ideas – use powerful techniques to get new ideas

I. Prepared Mind

Your mind is the main tool for generating ideas. Empty, timid and rigid mind will not produce successful ideas.

What should be the qualities of the mind to get great ideas and solve complex problems?

  1. Knowledgeable - know problem domain and other fields that can inspire new ideas
  2. Flexible - able to vary and adapt the ways of thinking
  3. Forceful - eager and resolute to find a solution
  4. Easy - clear and free from stress and fear
  5. Playful - can surprise and break rules
  6. Intuitive - come up with ideas without thinking and reasoning
How can you develop these qualities and prepare your mind to be creative?
Read full post >>

How to Become an Expert: Making Ideas Stick

Are ideas born interesting or made interesting? – Chip & Dan Heath
angelderoca

You have 2 options to communicate your ideas:

  1. Tell people what is interesting for you – easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.
  2. Make your ideas interesting for other people – hard, but you have chances that other people will pay attention, understand, remember and act upon your ideas.
This post is devoted to people who are interested in the second option.

Why should a programmer care about communicating ideas to other people?

It is true, the primary job of a programmer is to feed computers with ideas. But you cannot quietly hide behind a computer forever. You have to deal with other people:

  • team – to contribute and explain your programming ideas
  • customers – to discuss and build trust in your solutions
  • end-users – to make your programming ideas useful for users
  • programmers of the world – to share your knowledge and exchange ideas
  • capitalists – to sell your ideas
  • low tech crowd – to promote technology ideas

Why is it so hard to make ideas interesting for other people?

  1. Curse of knowledge – once you know something, it is hard to imagine not knowing it and communicate to novices
  2. Resistance – many people ignore or resist new ideas
  3. Limited brains – people have short attention span and can be easily overwhelmed by new and complex information

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 >>

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