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.


Popular posts from this blog

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

Entity Framework (EF) TransactionScope vs Database.BeginTransaction

In today blog post we will talk a little about a new feature that is available on EF6+ related to Transactions.
Until now, when we had to use transaction we used ‘TransactionScope’. It works great and I would say that is something that is now in our blood.
using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (SqlConnection conn = new SqlConnection("...")) { conn.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = ... sqlCommand.ExecuteNonQuery(); ... } scope.Complete(); } Starting with EF6.0 we have a new way to work with transactions. The new approach is based on Database.BeginTransaction(), Database.Rollback(), Database.Commit(). Yes, no more TransactionScope.
In the followi…

GET call of REST API that contains '/'-slash character in the value of a parameter

Let’s assume that we have the following scenario: I have a public HTTP endpoint and I need to post some content using GET command. One of the parameters contains special characters like “\” and “/”. If the endpoint is an ApiController than you may have problems if you encode the parameter using the http encoder.
using (var httpClient = new HttpClient()) { httpClient.BaseAddress = baseUrl; Task<HttpResponseMessage> response = httpClient.GetAsync(string.Format("api/foo/{0}", "qwert/qwerqwer"))); response.Wait(); response.Result.EnsureSuccessStatusCode(); } One possible solution would be to encode the query parameter using UrlTokenEncode method of HttpServerUtility class and GetBytes method ofUTF8. In this way you would get the array of bytes of the parameter and encode them as a url token.
The following code show to you how you could write the encode and decode methods.