Skip to main content

Big companies, Software Engineer and Partnerships

Some weeks ago I talked with a friend that used to work in a big company. He told me two interesting stories.

Story 1: You are working for a client on a project for 1-2 years. Things are going very good, you’re company decide that they will allocate another person in the team. The new developer will be a junior and he will take your place on the project. Because they allocated a new person in the team, you will be allocated only 2.5 days per week on the project. The rest of the time you will work on another project. They ask you to join the scrum every day and pretend that you are working all the week on the original project. The new member of the team will cover you. The client knows that the team is now n + 1 (the new member). So you begin to join the scrum every day and pretend that you are working…
First problem is sincerity. Going in a scrum meeting and pretend that you are working on the project on a specific day, but in reality you are working on another project is wrong. From the relationship perceptive you are destroying the trust that you have with the client. Yes, you think that he don’t knows, but in time he will observe that something is not okay.
Don’t forget that at the end of the phone another person like you exists. When you are pretending that you are working on the project – you are lying him.  
A software engineer should never accept a request like this from the company because a thing like this affects him professionally. You cannot name yourself a professional when you are doing things like this. The company cannot force you to lie.
If you need to work for one or two days one another project you should tell the client that you will not be available on that days. But, in this situations your company will request you to not tell them the true.
The best thing that you can do in this situations is to tell them that you don’t want to work anymore on that project. You cannot accept this “business” model.

Story 2: Your company has a very good partnership with another big company. Your partner comes and ask you to investigate and search a solution for their problem. After 2 days of investigation, your boss is coming to you and say that the both solutions are good, but you should hack the “investigation” in such a way that the second solution to be selected. This should happen because the team that has knowledge on the given technologies doesn’t have any project on the queue. You know that the first solution is better, so what should you do?...
This is a very common situation and I heard people saying that this is the way how businesses are made. Maybe this is true, but when you propose and push a solution that is not valid for the client you will suffer a lot – and you deserve to suffer.
When you will be ready with version 1.0 or in the moment when you will add some new features you will realize that is impossible to accomplish and the costs are very high.
In this situation, the guilty is divided between your company and you. First of all they push a wrong solution and now they will need to pay in one way or another. If the project was a fixed price project then they have big problems. Otherwise, there are chances that the client will pay without knowing the true, but in the end the partnership between them will suffer.
The software engineer that pushes the wrong solution usually is the one that will need to solve the new problems and it will not be easy for him. From the beginning he is making a big mistake, listening the management “recommendation”. The best thing that can be done in this moment is to talk with the client and explain the mistake – the current solution is not the best one and they should use another solution.

Comments

Popular posts from this blog

How to check in AngularJS if a service was register or not

There are cases when you need to check in a service or a controller was register in AngularJS.
For example a valid use case is when you have the same implementation running on multiple application. In this case, you may want to intercept the HTTP provider and add a custom step there. This step don’t needs to run on all the application, only in the one where the service exist and register.
A solution for this case would be to have a flag in the configuration that specify this. In the core you would have an IF that would check the value of this flag.
Another solution is to check if a specific service was register in AngularJS or not. If the service was register that you would execute your own logic.
To check if a service was register or not in AngularJS container you need to call the ‘has’ method of ‘inhector’. It will return TRUE if the service was register.
if ($injector.has('httpInterceptorService')) { $httpProvider.interceptors.push('httpInterceptorService&#…

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

Run native .NET application in Docker (.NET Framework 4.6.2)

Scope
The main scope of this post is to see how we can run a legacy application written in .NET Framework in Docker.

Context
First of all, let’s define what is a legacy application in our context. By a legacy application we understand an application that runs .NET Framework 3.5 or higher in a production environment where we don’t have any more the people or documentation that would help us to understand what is happening behind the scene.
In this scenarios, you might want to migrate the current solution from a standard environment to Docker. There are many advantages for such a migration, like:

Continuous DeploymentTestingIsolationSecurity at container levelVersioning ControlEnvironment Standardization
Until now, we didn’t had the possibility to run a .NET application in Docker. With .NET Core, there was support for .NET Core in Docker, but migration from a full .NET framework to .NET Core can be costly and even impossible. Not only because of lack of features, but also because once you…