Skip to main content

Fellow developer: The lack of empathy may be killing your career

Do you really understand your client? Are you sure?

Posted in Workplace, Career, Windows Azure, Software development

We, developers, are often practicing the best technology of today while trying to learn the best technology of tomorrow. The problem is that not so many of us focus on the other part of our work. Mostly understanding the client needs and improving our soft skills.

If a developer is not able to understand the client and have a decent overview about its business, he will be unable to create an appropriate solution. And that sadly means he will not be so different from a monkey with a keyboard.

The key for cultivating deep understanding is to create empathy and try to care about what is important for the client as we care about what is important for us but, unfortunately, the development culture is wrong.

Part of the blame goes to the schools. “Oh, this school has a great Computer Science program” or “Many people working in this amazing company come from that school” are common things to hear when you are about to pick a college. The problem is that most of the schools have an excessive focus on technical subjects making some of the future professionals with almost zero people skills as they are leaving the more “human” topics aside.

The other part of the blame I put on the people we look up to – Famous developers, our colleagues, seniors in our own companies and so on. When we start getting into software development for real we hear things like “clients never knows what they want” or, often, stories about developers who stayed overnight to deliver a project and are regarded as heroes.

Bullshit.

The real heroes in software development are those who actually try and succeed to understand what the client wants and are able to translate this into a well written code. Understand the client is not difficult, we just need to empathize with them. Just like we should empathize with everybody else.

To put this into a context, imagine if you need to visit a doctor: You don’t know what you have when you go to the doctor. You describe how you feel and the doctor will make the diagnosis based on what he hears and what he checks. Then he will prescribe some medicaments or send you to a specialist. We tend to trust doctors because we know that, even if they are pressed with time, they know what they are doing.

I know there are bad doctors. There are also bad developers. Just stick with me.

Can you imagine how you would feel if you go to the doctor with a broken arm and the only thing they do is to give you an antibiotic? That’s more lack of interest of taking care of you than very poor diagnostic skills. In another words, he is a monkey with a stethoscope.

I guess you know what I mean: We are the doctors and the clients are the patients. The same empathy which connects the doctors to their patients, should connect developers with clients. Only then we will be able to understand what the client wants and actually do something useful about it.

Oh, and by the way, if you don't understand the needs of your client you most likely don't understand your colleagues either.

Did you like the article?

You can subscribe and get them as soon they are online, share using the buttons bellow or leave a comment.

And you also can share using your favorite social network:

We need to talk about communication issues in development teams

Every software development team has communication issues. Here are the most important and how to address them.

Posted in Workplace

Communication is, by far, one of the most important characteristics of human beings. It all started when a monkey asked “Ugh?” and a second monkey answered “Agh!”. Everything changed in that moment. See, if you think about it, the very fact that you are reading this article is thanks to that very conversation.

According to the dictionary (Google), communication is the imparting or exchanging of information by speaking, writing, or using some other medium. Which means that if I am writing this article I am communicating with you.

And this is exactly what happens in software development, but mostly that’s not enough.

We have all the possible tools available to communicate (chat, commit messages, comments, team meetings, etc.) but, somehow, we fail to do so. Why? I don’t know, but I have some theories.

Developers like to create stuff, not to talk about it

That means we don’t have enough “feature-conversation” (talking about features in a project) within the team outside of formal meetings. The lack of “technology-conversation” (talking about new technology knowledge) is also an issue for the most part. Not to mention the lack of a normal conversation which, well, doesn’t need to be explained.

In a development team this might be one of the causes of delays in projects since, sometimes, a colleague might have the solution of a problem nobody expected to have because nobody ever heard him saying that he was trying some different technology. Not to mention the missed opportunities as someone might come to you to ask about that technology you tested at home and were proud enough to talk about it.

You can address this by talking more about the things you are learning. If possible, check with your team leader the possibility to organize some formal knowledge sharing meeting. I am sure everybody is learning something interesting on their free time, even if it’s a new cake recipe.

There is a lot of misinformation going on

A common problem is when a feature is misinterpreted and implemented in different ways by different people. In the long run, problems like this will cause the team to stop being a productive unit and become just a bunch of people working in the same room.

One of the causes is what I call “selective sharing”, which happens when only some people of the team are chosen to know something relevant to the project. That might not be on purpose but it’s still an issue.

A way to address this issue is to have everything clear from the very beginning: Clear features, clear communication path, clear responsibilities and so on. Also, a clear documentation helps quite a lot as it reduces the already classic “But X told me that 2 weeks ago, I remember”. In this way the volume of misinformation should decrease, reducing the chances of internal conflicts. Or, at least, they will be solved faster.

If someone is working remotely, everybody is working remotely

We always have that person who is working remotely either because decided to take a home office or because he/she is telecommuting. In this case a lot of information is missed due to lack of empathy.

You need to understand that someone (or an entire team) is sitting on the other side of the network and also craving for information. And probably being more productive in one hour more than you are in one entire day.

This can be addressed with a couple of measures:

  • Have empathy – You might be the one taking home office and working “alone” some day.
  • Make video calls whenever possible – This will always make the ones not sitting in the office an important part of the team.
  • Stop the impromptu meetings in the office – Nobody needs them, not even you. Even if you will share the information later. Schedule a video-call.

Of course I didn’t cover everything as I could write a book about it. But I am sure you have a lot to work in your ability to communicate within your team, just like everybody else (me included). This kind of work is a never ending process but it should be done if we want to keep the teams in a healthy state.

Did you like the article?

You can subscribe and get them as soon they are online, share using the buttons bellow or leave a comment.

And you also can share using your favorite social network:

What is the difference between Reference Types and Value Types?

Here is where you will understand the difference between a Class and a Struct. Also the difference between Stack Memory and Heap Memory.

Posted in C#, Back to basics, .NET Framework

Before we talk about the differences between Reference Type and Value Type we need to understand some basic things.

What is a data type?

A data type is a format which can contain some specific type or range of values. Basically, whenever you are declaring your variables you must assign some specific data type, as described here. On .NET Framework we have 2 data types: Reference Type and Value Type.

Stack Memory and Heap Memory

There are 2 different types of memory we will talk about: Stack Memory and Heap Memory. While the Stack Memory receives the values using FILO (First In, Last Out) the Heap Memory is much more like an unorganized set of boxes in a room. This means that the access to the Stack Memory will be much faster than the Heap Memory. And here is the catch: The Stack Memory is where the Value Type stays. And the Heap Memory is where the Reference Type stays.

One thing to keep in mind: The Heap Memory is cleaned by the Garbage Collector, which means that Reference Types will be disposed automatically.

What is Reference Type?

Reference Type is the type of data which makes a reference to where the value is placed.

A class is an example of reference type. If we copy a class into another class of the same type and change the values of the latter we will end up changing the values of the first one. This happens because the 2 classes are pointing to exactly the same place.

What is Value Type?

Value Type is the type of data which holds the actual value of the object.

A struct is a good example of value type. If we follow the logic used above (copy a struct into another struct and change the values of the latter) we will realize that we didn’t change the value of the first struct. This happens because we literally copied the values from one object to another.

If you want to see it working make sure to go to my GitHub repository and download the code: https://github.com/davidsonsousa/Back-To-Basics/tree/master/ValueAndReferenceType

Did you like the article?

You can subscribe and get them as soon they are online, share using the buttons bellow or leave a comment.

And you also can share using your favorite social network:

What are and how to use variables in C#

A short text explaining the basics of this every day necessity

Posted in C#, Back to basics

Every program you decide to write will use data at some point. I am not talking about databases nor web services. I am talking about plain simple variables.

To put it simple: Variables are nothing more than a named place in the memory where you store something to use later. Think of a box with a name in it and which accepts only certain kind of objects. For example: A box named "balls" which accepts only spherical objects.

In C# we have the following types:

  • Integral: sbyte, byte, short, ushort, int, uint, long, ulong, and char
  • Floating point: float and double
  • Decimal: decimal
  • Boolean: true or false values, as assigned
  • Nullable: Nullable data types

Define your variables

You can define your variables in 2 ways:

  1. [type] [variable_name], [variable_name]; (eg.: string name, surname;)
  2. [type] [variable_name] = [variable_value]; (eg.: string name = "Joe";)

The first one is used when you want to define one or many variables at once, without setting a value. The second alternative can be used when you want to initialize the variable already during its declaration.

Default values

As mentioned above, we can define our variables without initializing it (setting a value). In case we do it, however, we need to pay attention to the default values which each object has. See below:

  • bool: false
  • byte: 0
  • char: '\0'
  • decimal: 0.0M
  • double: 0.0D
  • float: 0.0F
  • int: 0
  • long: 0L
  • sbyte: 0
  • short: 0
  • uint: 0
  • ulong: 0
  • ushort: 0

Notice the letters beside some of those default values. Normally the compiler will require you to specify what kind of value you are assigning to a type. And in order to tell it to the compiler that you want to assign a, for example, double instead of a float you need to add the D in the end of the number.

Sources: MSDN, Tutorials point

Did you like the article?

You can subscribe and get them as soon they are online, share using the buttons bellow or leave a comment.

And you also can share using your favorite social network:

Could not load file or assembly ‘Antlr3.Runtime’ or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))

How to fix this weird project error with in a very simple way?

Posted in Tutorials, IIS, ASP.NET

I just had a weird issue with my project: I’ve hit Ctrl+F5 to run and the browser opens. So far, everything ok. When I was going to attach the process I got a BSOD.

As if that wasn’t weird enough I got the error below after restarting everything and running my project again:

Could not load file or assembly ‘Antlr3.Runtime’ or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG)) Antlr3.Runtime

Luckily someone had this issue before (thanks Cloud Developer!) and I was able to solve it easily. What is the solution? Just empty your %TEMP% folder. Here is how:

  1. Click the Start button and then Run (or press Win+R)
  2. Type: %TEMP% in the box
  3. Click the OK button (The directory for temporary files opens)
  4. Select all files (press CTRL+A)
  5. Press the DELETE key on your keyboard

You don’t need to delete all files, but just the right ones. In case it doesn’t work and you need to delete all files it’s recommended to close all programs (even those on the system tray – beside the clock) and repeat the steps above.

Did you like the article?

You can subscribe and get them as soon they are online, share using the buttons bellow or leave a comment.

And you also can share using your favorite social network: