Thoughts: Nobody wants to be told what to do, even when they ask

Here are some thoughts for anyone reading this…

A developer shouldn’t have to ask for things to do.

If you have developers asking for work, you have problems.

There are two major things going on here. One, you have a developer who doesn’t know what the team is focused on. Two, you have a team that isn’t marketing, internally, what the priorities are.

Let’s start with #1. There are types of developers who want to be “tasked out.” They want a task they can take away, work on, then deliver for someone to verify. There is nothing wrong with this. Arguably, these developers are common. A team needs to know how to make the most out of these types of developers. The software process needs to supply them with work. These developers suffer when the software process and team structure cannot support them.

As for #2, you shouldn’t expect a developer to “just know” what to work on. You should expect a developer to know where to go to get the priority items to work on and where to get the information necessary to complete the work. If a developer is asking for work. More than likely, either there is no defined work to be done (no backlog), or the team isn’t able to convey the priorities and how to accomplish them.

A developer will only ask for something to do if they don’t have anything more interesting they want to do.

In the past, I’ve seen developers go for weeks or months without executing on anything significant. Most of the time, this has been because no one on the team was explicit asking them to work on an item. Moreover, they usually had something that was keeping their interest. It may have been an unrelated task or a side project.

At the end of the day, the core problem is the team being unable to work together cohesively. If a developer feels that nobody is aware of the lack of effort they are putting in towards the team’s goals, and takes that opportunity to work on items they are interested in or just not work at all, then the issue is with the makeup of the team.

Merge Query for C#

I’m in the process of getting MergeQueryObject setup on github. This was one of my personal projects. Previously, I had been maintaining it in a private repository, but I think it is in a form where it would be usable by others.

https://github.com/JasonDV/MergeQueryObject

https://www.nuget.org/packages/ivaldez.Sql.SqlMergeQueryObject/

List of features:

  • Support for surrogate or natural primary keys
  • Update from a target table given a collection of DTOs.
    • Option to preform only Updates and no Inserts or Deletes.
  • Insert from a target table given a collection of DTOs.
  • When a collection of DTOs is “merged” into the target table, any records in the target table not in the collection of DTOs will be deleted.
    • Option 1: Ignore Deletes
    • Option 2: Delete from a target table given a collection of DTOs.
    • Option 3: Mark for Delete (“soft delete”) on records in target table given a collection of DTOs.
  • Target updates to only specific fields by using a DTO that partially matches the target table
  • Target changes to a portion of a very large table.
    • For example, target changes to a specific date range
  • All features of BulkLoader are supported.
  • Create a temporary source table or Create an concrete source table.

MergeQueryObject’s primary use is performing updates, inserts, and deletes into a large target table using minimal C# syntax. The basic “merge” concept comes from the fact that a source temp table is setup with the wanted values and the Merge statement executes the necessary actions to make the target table match the source table. This can be done for the entire table or portions of a table.

It is a low level utility that sits just above the database and works with POCO DTOs, using my other project BulkLoader to load the temp table.

Creating Query Objects is something that should be done for complex SQL. It helps with maintainability of the code and makes it easier to conceptually test and verify, since the query object has only one responsibility.

Cross-platform targeting

SQL BulkLoader was my first attempt at multi-targetting a nuget package.

https://github.com/JasonDV/SQLBulkLoader

There are some interesting best practices around this concept.

https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/cross-platform-targeting

Normally, when working on line-of-business applications, I have a lot of control over what .NET target I’m using. I choose mostly based on which targets are current and what is installed on the deployment infrastructure. Getting configuration changes to deployment environments is often time consuming; therefore, I avoid it unless upgrades justify the time.

In the future, I’ll explore some of my justifications when putting together a solution and choosing technologies, structure, and environment.