Problem solving is a key aspect of software engineering. There are always multiple solutions. Each solution has strong- and weak points.
When discussing which solution is the best, other details pop up. At that point it’s can be very useful to ask the following questions:
Is the problem that you’re trying to solve even a problem?
Should the problem you’re trying to solve even be solved?
Is the problem that you’re trying to solve the real problem?
Today I had an interesting challenge when commuting back to my house. The start of my journey was perfectly normal. My train was waiting for me at the expected platform, went at the expected time in the expected direction. Once we passed the second station the train stopped. There was a big disruption and all the trains in the province had stopped.
So, what to do? Wait until the trains are allowed to depart? Go to my house through an alternate route? The quickest alternative was to take a bus back to the train station I left from (45 minutes), and then take the bus to my house (54 minutes)*.
Neither option was very attractive. To wait at the train station without knowing how long I would have to wait, or to take a very long ride with the bus. At that point I realised, the problem was not getting home. The problem was how to still have a nice night.
So, I went to the cinema. Saw a nice movie. Once I got back at the train station, the disruption had been fixed and there was a train waiting for me. I love it when a plan comes together.
* Normally my train ride takes 31 minutes. So that’s a lot of time.
Interviewing a potential new colleague is always an interesting event. Sometimes you get unexpected answers to your questions. A couple of weeks ago I was interviewing a promising candidate. The interviewee was describing how a transition to Scrum had improved performance. The following question popped into my head:
It’s getting harder and harder to determine what kind of device to buy. A couple of years ago you would have a desktop and/or a laptop. Then netbooks were introduced. Ultrabooks. (Usable) tablets. Hybrids. But a lot of those devices only partially replace this original machine.
A picture is worth more than a thousand words in this case. Especially if there are actually words on it 😉
This diagram is a bit opinionated, does not take into account all devices available and is mostly my personal view of how the spectrum looks right now. It’s how I ended up replacing my Medion Akoya E1210 with a Surface pro 2.
If you start with Symfony 2 using the quick tour, you might assume there is only one way of creating a controller: by extending Symfony\Bundle\FrameworkBundle\Controller\Controller. If you follow the more in depth book you might notice a tip to a second way of creating a controller: as a service. Lately I’ve been exclusively creating my controllers in this way, and I’m starting to like it.
Since a couple of weeks I have a tablet computer, the Surface Pro 2*. It’s really weird holding a piece of hardware in your hand that is just as fast as your main desktop, but more on that later. There is one thing that I’ve started noticing more and more: a lot of websites could be more touch friendly. A post on developing for touch screens.
Every good product owner has a clear vision. He’s bursting with ideas of what to do next. The main tool he has for this is his product backlog: a prioritized list of all those ideas. At the start of each sprint the most important ideas are chosen to be implemented. But what if, halfway down the sprint, more ideas come bursting up?
While researching for a future blog post, I came across this nice quote that I felt like sharing.
When you start a sprint, it’s very likely that one or more team members will be on holidays for part of it. How can you still reliably plan a sprint in those circumstances?
Consider creating a vacation user story.
The vacation story has tasks for each team member’s time away, which accounts for some of the team’s capacity when stories are being committed. As the sprint progresses and the vacation days are hit, the burndown chart reflects these time-away tasks as being completed along with any other tasks. This prevents the burn-down from falsely indicating a problem.
When creating a vacation user story the burndown chart will give a better indication of the current progress. In some sprints there will be more people taking days off, like in the summer holiday or during Christmas. This kind of user story can help you in determining how many user stories to take on.
There is a catch, of course, is that this is not an actual user story. It does not add business value :).
One of my computers is a Medion Akoya E1210 netbook, which I bought in 2008. When I bought it, it was brilliant: the first low-cost, low-weight laptop that you could still use to get stuff done. But, time has not been nice on it. It’s meagre atom processor and it’s 1gb of memory are ready to be replaced.
What to replace it with?
Tablets are nice to play with on the couch. They are great to watch pictures on, or to follow a social network of your choice. For me however, they will only replace a subset of all features. It’s not replacing any machine. It’s just adding one more machine.
The category of machines that I’ve been looking for in the past few years are the laptop/tablet hybrids. Ideally I’d end up with a proper laptop replacement, but that allows me to use it like a tablet. This type of devices exist, but they always fail on one or multiple items from this list
Too little battery. The original Microsoft Surface Pro clocked in at under four hours of usable battery time.
Too heavy in tablet mode. Any laptop that slides, or flips is just too heavy to hold as a tablet. Being able to remove the keyboard is a key feature for me.
Some machines come close, like the Lenovo Helix or the Acer Iconica W700. But nothing that convinced me into buying it.
Enter Microsoft’s announcement of today: The Surface Pro 2. I like how it addresses some of it’s predecessors’ pain points: improved battery life and kickstand.
Did Microsoft just announce something very nice today?
On Thursday 28th of August the hnDependencyInjectionPlugin was released on GitHub and packagist. Unfortunately I’ve been too busy to write this blog post about it since. When I got an e-mail yesterday about a new stargazer*, I decided it was time to blog about creating the hnDependencyInjectionPlugin.
So, what does this plugin do?
It’s a small Symfony 1 plugin, targeted at aiding the upgrade to Symfony 2. This upgrade is a big problem, because Symfony 2 is a complete rewrite of Symfony 1. With the plugin you can make the transition like this:
Upgrade in baby steps. Incrementally.
Some components are easier to integrate then others of course. In my personal experience you can start using the form component almost instantly. If you use Propel, it’s a nice idea to start replacing it with Doctrine. It’s also interesting to include are the config component and security component. The last one I didn’t try yet, but there should be something possible there.