Software Engineering 101: Constraints Everywhere

Engineering is all about constraints

I feel this fact is the most underestimated truth in programmer's career.

There is always a set of constraints: time, budget, skills and tools available, business domain, etc.

This set of constraints forms a unique context.

What's context?

Let's refer to wikipedia:

Context (language use), the relevant constraints of the communicative situation that influence language use, language variation, and discourse summary

I will cut off the noise...

Context - the relevant constraints of the ... situation that influence ... use, ... variation, and ... summary

And transform this in the "engineering use":

Context - the relevant constraints of the situation that influence tools use, skills variation, and summary of decision

The job of the engineer is to analyze and understand those constraints in a given context and to make valid decisions to create valuable things.

How to tame a unique context?

To handle any problem you should first understand the problem itself.

The best way to do it fast is to be proactive.

Proactive behavior involves acting in advance of a future situation, rather than just reacting. It means taking control and making things happen rather than just adjusting to a situation or waiting for something to happen.

The first step is to ask and listen to the people around you.

There is 3 main questions you need to get answers for as soon as possible:

  1. What am I doing?
    This question helps to determine the goal.
  2. Why am I doing this?
    This question helps to understand the reason.
  3. How can I do this?
    This question reveals the resources you have.

You may wonder "Why there is no question related to time, like When?".

Well, you will be always stressed with the fact, that the problem have to be solved yesterday :)

Just admit that fact, take a deep breath and relax. And this essay may help you to recalibrate your notion of time and speed in software development.

When you will figure out the answers for the 3 questions, you will be well prepared to make relevant tradeoffs and you will get the initial strategic path to follow.

How to keep the pace?

To be proactive and make the best decisions, you need to be motivated.

And the best motivation is to work with the things that resonate within you. And to work with people who resonate in the same way.

You need to be passionate.

A lot of technical folks neglect the emotional part of the human nature. This is a professional bias.

Emotions are vital. Emotions are essential for communications. Emotions make us human beings.

The Ultimate Goal

It is useful to stop sometime and remind yourself that the Ultimate Goal is:

  1. Not the money you make.
  2. Not the code you write.
  3. Not the design you create.
  4. Not the joy you get.

The Ultimate Goal is the Value you create for people around you.
If you have the goal like that - all other things will be included!
It's pure magic!

If you want to dive into this topic, I will suggest you to start with this great essay.

It is hard to have this goal in your mind. Especially when you feel the pressure of the context you are in.

But here is a key: when your working flow will be smooth, based on your mastered skills, you will start thinking about the value automatically.