Software Creation Mystery - http://softwarecreation.org

Archive for the ‘Productivity’ Category

Achieving Top Mental Performance for Software Developers

Do you want to get all your tasks done fast and furious? Shore up your spectacular software development work with this post!

The Imperfect Brain

Lets start with the brain – the most important organ for software development work (I would be surprised if you have even more important organ for this job). This biological tool, composed from 100 billion of neurons and many legacy structures inherited from worms, reptiles, mammals and other animals, is not really perfect for programming tasks.



I think I know – you want to have between ears obedient powerful and reliable machine like the shiny new computer on your desk that crunches tasks with the highest performance without taking breaks, emotional drops and losses of attention.

Unfortunately, our brain reminds more an old computer that barely runs your development activities competing with other processes for limited memory and processing resources on the top of overloaded unstable Brain OS.

Yes, writing software is not easy and not the most important biological mission for your busy brain. It is difficult to achieve top mental performance for your tasks, especially, if you are just doing your daily job and not writing the next Facebook in your basement.

How can we still squeeze good performance from our programmer’s favorite organ?

Problem definition

Goal:
Great mental performance for development tasks

Desirable Condition:
Focused & Productive Brain

Main obstacles

  1. Unclear goals – brain confusion with lack of certain direction and understanding what to do
  2. Dissipated Time – absence of dedicated committed time for the task opens rich possibilities to avoid hard work and procrastinate.
  3. Multi-tasking – running several activities in the same time significantly drops your IQ.
  4. Insufficient energy – tired, emotionally overwhelmed or indifferent brain is not productive at all
  5. Distractions – frequent interruptions do not allow to immerse into the task
  6. Mismatching task – too boring or challenging tasks prevent full brain engagement
  7. Brain overload – complex, dull or voluminous information inhibits your brain operational abilities.

There are three elements of your performance

  1. Tasks – what should be done.
  2. Time – how long and what way you work on your tasks.
  3. Mind – mental energy and abilities to get tasks done.

Read full post >>

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

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

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

Three Dimensions of a Software Programmer: How to get things done

What you are as a person is far more important that what you are as a basketball player. – John Wooden

People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting – all people are completely different in their attitudes and behavior. But this comes with price – it is difficult to understand people and even more difficult to find the best way to deal with them.
Many people, who see programmers as extensions of their computer systems, will be surprised to discover that programmers are amazing individuals too. Programmers exhibit similar to other people behavior, they have different personalities and need individual approach.

I offer in this post a simple theory about Three Dimensions of a Software Programmer that could help to put relations with these individuals on some rational basis.

Axioms

There are two basic axioms in foundation of the theory

  1. Constancy – some programmers consistently outperform others under same conditions.
  2. Variability – performance of a programmer varies under different conditions.

Read full post >>

How to Become an Expert. Top 7 Qualities

Experts do not need rules to make decisions. They have qualities that allow them to consistently make good decisions and show high level of performance under different circumstances without any rules. This post discusses these core qualities that turn a novice into an expert.

Definitions
rule: prescribed guide for conduct or action
intuition: instinctive knowing (without the use of rational processes)
tacit knowledge: automatic, unexpressed knowledge that provides context for people, places, ideas, and experiences. Tacit knowledge is not easily shared. As Polanyi said: “We know more than we can tell.”
context: the set of circumstances or facts that surround a particular event, situation, etc.

Problems with rules

Most rules didn’t come from heaven. They come from ordinary people. They are product of practice, theories, traditions and fear.
Problems:

  • context-free – rules reflect standard situations without considering your specific circumstances
  • limited verification – most rules are empirical and do not pass vigorous analysis, strict prove and experiments
  • time sensitive – many rules become outdated quickly in dynamic professions, industries and societies
  • overcautious – fear fuels many rules and seeks to protect from the worst scenario, often imaginable
  • low skills denominator – rules tuned to match capabilities of the majority without accounting for individual strengths and weaknesses
  • misinterpretation – tacit knowledge of experts, which forms base for many rules, is difficult to transfer in correct and understandable form

Read full post >>

How to Become an Expert. The Effective Way.

experts are made, not born – Scientific American

Disclaimer: This post is devoted to a person who wants to become an expert – the top player in a specific field as programming, soccer or chess. This post will be not interesting for people who are satisfied with their current performance and not interested to be the best.

If you want to become an expert, it is not enough to follow your work assignments or occasionally play with interesting stuff at home. You have to push yourself hard in specially designed way.

@Work
Your paid work tasks and projects are not designed to make you an expert. Your company expects results from your work: reliable, with minimal mistakes and focused on the company main goal – make money. Your employer could provide minimal training to help you with job requirements. However, your growth will be constrained by company needs, timelines, work assignments and acceptable methods. We cannot blame our organizations – this is part of the deal – they pay for your work and expect specific results. But… is this the best way for you to become an expert, acquire new skills and gain knowledge? To become an expert, you have to make many mistakes, learn from them, experiment with alternatives and work hard on your weaknesses. How many organizations do allow this risky, unproductive and unreliable way of working?

@Home
Your play at home with interesting stuff has problems too. To satisfy your programming instincts and curiosity, you will probably select what you enjoy to do and eager to try. You’ll immense in this activity and find great satisfaction from doing it. But…  is this the best way to become an expert by doing only what you like? Becoming an expert requires hard, sometimes unpleasant work, specifically designed to improve your performance and push you over comfort zone. 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 >>

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