Skip to main content

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:

An open letter to all recruiters

On behalf of all candidates

Posted in Business, Misc, Career, Personal life

Dear recruiters,

Sometimes you call. In this call you offer the supposed perfect job opportunity to work in the outstanding perfect company: The company has amazing benefits, the salary is great and the environment is outstanding.

Sometimes you are serious and focus only about the position. Sometimes you are friendly and love to talk about your dog. And, of course, sometimes we can notice that you don’t want to talk. That’s ok, everybody has the right to be different. And we all have bad days. Personally, I prefer the friendly ones. Only because they make me believe that I am the most special person in the world. And when you call me in my bad day to make me feel special, you totally won. But the serious ones are good too.

There is only one thing: Apparently you have some issues on matching my profile with the job offers you are presenting to me.

Allow me to explain.

Most of the offers I get from you are “C# Developer”. And yes, I know C#. But the problem lies in the field and also the projects. Mostly this kind of position would lead me to work in a company where I will go very deep into C# and never see anything else. For example, some company where I should work on a system to control, let’s say, traffic lights. Would I work there? Maybe. But it's not a good fit.

See, I am a web person specialized on the ASP.NET stack. In my line of work I need to understand a bit of front-end so I can make a good quality back-end, matching them together in a nice result for the client. This is what I have been doing most of my career. If you doubt just check my Linked In profile. Go to my specialties and certifications so you will see that they are mostly focused on web.

But it's alright, I still like you.

I believe it’s not your fault. You might have goals to reach and you might not have enough time to check a a lot of profiles thoroughly. All of this is understandable. And it’s ok for me as I can say that I am not interested in case you offer something which is not a good fit.

But I care about you. I care about the time you are devoting with me and other candidates which are not a good fit for the positions you are presenting. We know that every candidate you interview who is not a fit makes you lose money (time = money). And your company is losing money as well.

So, here is the advice: Try to understand the position you are going to offer and also try to learn a little bit more about the candidates before the call. And don't shoot e-mails crazily about random job offers only because there is one key word matching. It's not about keywords anymore - it's about meaning. Of course, sometimes I would be motivated to change everything. It can even happen that, some day, I will really be interested to work programming for NASA and see my code going to other galaxies.

But not yet.

In my perticular case, I am focused on web. After all, I am a web person. And since I am a web person you can talk with me about websites developed and I will gladly listen to any offer you will present related with the ASP.NET stack.

Sincerely,

Davidson Sousa

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: