It’s funny, when alternative technologies comes out that do a similar thing to a previous technology, people are very quick to pronounce the previous technology as dead. I was talking to someone the other week at a different company who said that their architects wanted to use WebAPI because WCF wasn’t relevant any more. This made me think, WHAT!!, REALLY!!, SURELY NOT!!
WCF is Dead. All Hail Web API
In the rest of this article I want to briefly cover what WCF and WebAPI are, talk a bit about the differences, and then suggest the reasons why you may use either. This isn’t an exhaustive discussion, but the point is that you can have various technologies doing similar things, without either one of them being redundant. I have spent the last 7 years of my career being involved in service architectures built using WCF and I am certainly not thinking I need to replace any of those systems just yet.
In the first part of this article on motivation and innovation for software development leaders, I talked about what motivation is, how your working environment can affect your motivation, and how to get into the zone whilst working. In this 2nd part of the article I want to discuss some of Edmond Laus’ Strategies for finding meaning in your work from his blog post, “What research on happiness and motivation can tell us about finding meaning in our work.”, and how Me and My team have applied some of these strategies.
Strategies for Finding Meaning In Your Work
In Edmond’s his article he proposes 5 strategies for finding meaning in your work. I want to list them here with my own thoughts, but please check out his article to get his own thoughts on them.
Validate new ideas early and often with simple proofs of concept
This strategy really speaks for itself. Before investing a large amount of effort into something that may not work out, you should try out a proof of concept first. Generally a proof of concept will be a throw away piece of code just to prove whether a theory will work or not. When my team write proof of concepts, they don’t even bother writing unit tests for them, as the code is never destined to be production code. You can even take this POC idea further by following some of the Lean Startup ideas and produce a larger working mock-up of a system, or a minimum viable product as described in the book.
The Lean Startup – Eric Ries
We tried this in my team. We had a project that our debt recovery department wanted to initiate, which is a self-service portal on the web to allow customers who are already in debt to make a payment online, and therefore avoiding a difficult conversation with our debt collectors over the phone. The idea made a lot of sense, but before investing a large amount of money in building the portal, we did a lean start-up style set of experiments to test the theory against a minimum viable product.
In this series of articles I want to discuss some topics for software development leaders around motivation, innovation, and the different leadership styles you can use to support your team. When you are leading a team of software developers, or indeed any knowledge workers, you need to keep them motivated to continue getting the best out of them. There are many ways to do this, and they don’t always involve paying people more money. In the rest of these articles I am going to discuss some thoughts on motivating developers.
When I started planning this series, I was mainly going to cover how to get the developers in your team to innovate in a safe and controlled way. Then I came across an article called “What research on happiness and motivation can tell us about finding meaning in our work.” By Edmond Lau.
Motivation – Getting in the Zone
It is a really good article and I want to pick up on a few points and discuss them further. There are many different ways to get someone motivated, but by far the biggest for a knowledge worker is to give them meaningful and challenging work.
A colleague of mine sent me an article on ArsTechnica that was a short discussion on whether it is a good idea to write tests for legacy code. This was made up from a collection of posts on Stack Exchange. The original question was as follows:
“Suppose one had a relatively large program (say 900k SLOC in C#), all commented/documented thoroughly, well organized and working well. The entire code base was written by a single senior developer who no longer with the company. All the code is testable as is and IoC is used throughout—except for some strange reason they did not write any unit tests. Now, your company wants to branch the code and wants unit tests added to detect when changes break the core functionality.
Is adding tests a good idea? If so, how would one even start on something like this? “
Original question posted by Paul over at Stack Exchange
It’s a good question, so I thought I would write down my thoughts on it. I am a firm believer in Test Driven Development (TDD) and this is much easier when you are working on a nice new green field project (writing a new system). Unfortunately we don’t always have the luxury of working on new systems and we have to maintain older legacy systems, or brown field applications. If you have a large brown field system, I personally do not think there is much value in getting your team of developers to sit there and wrap the whole system in tests. Whilst it may feel nice to know the application is covered in tests, the level of effort and expense in doing so is likely to be very high indeed. If the system has been around for a long time, then it is most probably working fine and your users are happy with it (this isn’t always the case, but is more often the case).
What I do feel is valuable though is adding some tests when you need to change/extend part of the code base. As the system already exists and you can’t reliable determine that the code is doing what it should be doing you can write what Michael Feathers describes in his book “Working Effectively with Legacy Code” calls characterization tests. A characterization test is:
In the modern software development world we rely on lots of different tools to help us with our jobs. In this post I thought I would list the tools which I rely on each day and couldn’t live without. Each and every one of these tools forms a large part of my daily productivity.
The tools I want to cover are:
- Visual Studio 2013
- Mind Genius
- Enterprise Architect
I would really like to hear from people in the comments about the tools that you rely on. Mainly as I am always on the lookout for new tools, but it is always good to see what other people like to use as I am sure you are all a very diverse bunch.
Visual Studio 2013
I have been using Microsoft’s Visual Studio in various versions since Visual Studio 5 back in the 1990’s. Visual Studio has come on leaps and bounds since those early days of C/C++ coding. Microsoft has recently released Visual Studio 2013 and this is definitely their best version of the tool-set yet.
Visual Studio 2013
I mainly use the .NET development tools and flit around between Winforms, MVC and WCF projects. Visual Studio 2013 comes with lots of enhancements to the IDE including code preview scroll bars, Code Lenses, Peek Definition, Sign into Visual Studio and the new group by class in the test explorer. I think for as long as I am ever writing code I will be using Visual Studio, so it will be interesting to see where Microsoft takes it next.
In this article I have collated a few training links about Windows Presentation Foundation. I will keep adding to this page as I find other useful free resources. If you have any videos or articles that you feel would be useful here then please let me know in the comments and I will add them to the post. I would like it to be an archive of good material.
Windows Presentation Foundation (WPF)
In this section I have provided links to different WPF tutorial resources that are ideal for beginners.
Walkthrough: Getting Started with WPF on MSDN
The Complete WPF Tutorial
WPF Tutorial Video Channel on YouTube
Intertech : Windows Presentation Foundation Training Video
MVVM and WPF
This section contains tutorials and articles that explain how to build an MVVM (Model, View, View Model) application with Windows Presentation Foundation (WPF)
WPF/MVVM Quick Start Tutorial
The World’s Simplest C# WPF MVVM Example
WPF Apps With The Model-View-ViewModel Design Pattern
Easy MVVM Example on MSDN
The Model-View-ViewModel Pattern
WPF MVVM Pattern: A Simple Tutorial for Absolute Beginners
This section contains some links about the XAML markup language used by Windows Presentation Foundation. XAML is an XML markup that is used to define how user interfaces are rendered and events are wired up. XAML is a very feature rich language that can be edited as XML in Visual Studio, or you can use the built in forms designer. If you need to do any design work that is more in depth, you can use the Expression Blend tool.
XAML Overview (WPF) at MSDN
XAML Tutorial Video on YouTube
What is XAML?
XAML in Windows Presentation Foundation (WPF)
XAML Channel over at Channel 9