Category Archives: Software Development

Creating an ecosystem with Continuous Integration, Installer and Deployments for a WPF / UWP application

I’ve been developing Windows desktop applications for many years now, and the operations behind the development process always fascinated me. I mean matters like issues tracking, build machine, installer and deployments. Everything  that involves in a developing a successful project, that’s not directly writing code.

In recent years buzz words like Continuous Integration and Devops popped up into consciousness, which partly describe this process.

I’m going to write here about the tools and technology stacks we have to choose and implement to create a successful ecosystem for your project.

The Goal

In between buzz words, it’s a bit hard to understand what is continuous integration and what exactly we are trying to achieve.

One way of defining it is that continuous integration means to have an automated work flow, in which every time a developer checks in code, it will compile and build on a dedicated server. This dedicated server will also run tests and if the build fails, or if at least one of the tests fail, the check-in will be rejected.

Now let’s go a bit further and think about Deployment. By that, I mean the way you deliver your software to the customer. Let’s assume for now, you want to give him a setup.exe, which he can run on his PC and install the program.

Our dedicated CI server should  also produce such a setup.exe file and even upload this file to some other server dedicated to published versions that the customer can download and install.

Out CI server is also there for the QA department, which needs to get product versions, test them, open bugs and get new versions with fixed bugs.

Part of this process which I described is called Continuous Integration. But, I also want to talk about the Deployment part which is a close cousin of the continuous integration and they both compose the ecosystem of the development process.

Continue reading

What’s the best way to learn a new technology?

In software we have to learn new technologies all the time. I mean, every day there are probably a couple of additional JavaScript frameworks born into the world.

The amount of languages, frameworks, 3rd party libraries and tools is staggering. And every place of work uses a unique permutation of those.

As developers, we have to stay on top of things, no two ways about it.

Once we’ve decided we want to learn a new technology, we have a lot of ways to approach that. Especially with the burst of information nowadays. There’s no clear answer as to how we learn something. It depends on the technology itself, how deep you need to learn it, how much time and money you have to spend on this and personal taste.

If it’s a big technology stack like WPF, some YouTube videos probably won’t cut it. However, if you need to do learn a small JavaScript library, reading the documentation alone might be enough. It all depends. If I know I’m going to do a big project with React, which I don’t know at all, I’ll take a long Pluralsight course at the very least.

Continue reading

Software Engineer’s path to the best annual performance review

How the annual review scores are formed in the eyes of managers always fascinated me. I have five years of experience with annual reviews myself, and I was always able to do well on them.

As a tech lead I got to give recommendations and participate in some discussions with managers. I formed a pretty firm and possibly naive point of view on them now.

Continue reading

How my life changed when moving from TFVC(TFS) to Git

After working for the last three years with TFS’s classic source control TFVC, I recently moved to a new company and with that, to Git.

Before working with Git, I loved working with TFVC. I thought it was great and pretty much the most I can expect from a source control.

Git however changed the way I work with source control and even the way I think about source control.

This post is a small taste of what Git does and how my workflow changed accordingly. It is not a Git tutorial, but rather my impressions from it. I do link at the end to some additional resources.

Continue reading

The Over Designer

Have you ever encountered an over designer? An over designer is a software developer that had some life changing event and became obsessed about architecture. The result being, obsessive decoupling, endless coding of Factories, creating deep (also needless) inheritence hierarchies and various use of design patterns for no good reason.

I believe the over deisgner is a mutation in the natural evolution of a software developer.

Software Developer’s Evolution

Not every software developer reaches to Senior level. Few reach to Jedi Master and some rare geniuses evolve to Jon Skeet’s level.

I believe somewhere during the transition from Code Monkey to Senior a mutation occurs: The Over Designer.

Continue reading