Despite all the fancy tools we have today, software projects fail as often as 15 years ago.

More frameworks & tools are not a solution. Instead we need to explore more humane ways of collaborating, establish a culture of continuous learning and strive for technical excellence.

Personal Photo Management using Go and TensorFlow

We love taking photos. Privacy concerns - and the wish to properly archive them for the next generation - brought us to the conclusion that existing cloud solutions are not the right tool to keep them organized. That’s why we started working on an easy-to-use application that can be hosted at home or on a private server. About Our first proof-of-concept was a simple demo app that could find cat pictures in a directory.

The nightmare world of Agile we created

If you’re reading this, you’ve probably noticed that many software development teams got stuck in a swamp of “agile” tools, useless processes and bloated frameworks. In their search for higher productivity, they forgot the importance of real human interaction and technical excellence. Corporate managers and employees are conservative and avoid experiments if they can. This is why they’ve chosen a permanent position. It’s easiest to get them when they are already in trouble: Not during an obligatory training but later when it’s time to deliver, money is running out and everything is about to explode.

Quick and easy guide for migrating to Go 1.11 modules

Dependency management traditionally has been one of the weak spots of Go. Knowing that Google internally is using a monorepo, this didn’t seem much of a surprise. Various techniques like using a vendor directory and tools like dep evolved to solve the issue. Go 1.11 finally comes with (experimental) module support and the good news is: While it doesn’t look anything similar to dep, it’s surprisingly easy to migrate to and use.

You’re not an influencer, you’re for sale

Be honest: Does the number of followers on platforms like Twitter matter to you? Even if you’re above average, there’s always room for more. Social media makes it very easy to compare your own profile and influence with that of others by design. We’re witnessing the effects of the attention economy. Attention is a scarce commodity so people are following strategies to get more of it, because… yeah, why? That’s an excellent question.

Hire the best: My amazing experience with McKinsey, Amazon & Co

Since I’m not going to church, I need to write things down in my blog to let go. Probably every freelancer knows this: You’re being contacted by recruiters that want to sell you a permanent position at their amazing company. So, how amazing can it be? Let’s see. First of all some facts. As a freelancer in Germany, you can easily make 85K a year, considering you work full time for 11 months and got a very affordable hourly rate of 60 EUR and 10K of expenses.

Mocks are evil

There’s some confusion in the community concerning the use of mocks for unit testing. Mocking is creating objects that simulate the behaviour of real objects. I personally don’t mock class dependencies by default but use real objects and test doubles via dependency injection. Despite the success of this approach, many developers are still plagued by concerns that the resulting tests are just some sort of component or integration tests and not true unit tests.

Input, model and client-side validation explained

This is a follow-up on Why I’m using a separate layer for input data validation that explains the key differences between client-side, input value (form) and model validation. In general, model validation operates on trusted data (internal system state) and should ideally be repeatable at any point in time while input validation explicitly operates once on data that comes from untrusted sources (depending on the use case and user privileges).

Why I’m using a separate layer for input data validation

While some developers seem to prefer to implement their user data validation rules directly in the model layer (or even worse, the ORM entity layer), this very often leads to problems as described by Stefan Priebsch in his blog post on How to Validate Data. In addition to the many issues he mentioned, you should consider the following advantages of using a separate layer to validate user input data:

How to conduct a great IT job interview

If you own a software company or work there in HR, it is your goal to hire the best engineers for your business. So you certainly don’t want to mess up the recruitment process. As someone who’s in the industry for two decades (sitting on both sides of the table), I would like to share a few points about how to make an interview a positive and insightful experience for everyone.

Mac OS X configuration for software developers

Coming from Linux and FreeBSD, I initially didn’t feel comfortable working with OS X and I still think it’s a bad idea to run a full featured Web server on a Mac. But there are a couple of things you can do to turn your Mac into a great development environment. Install the following essential software packages Google Chrome and Firefox – Safari is the new Internet Explorer ;) Xcode via App Store (free); required to compile software with Homebrew and comes with the Mac version of git Homebrew for installing additional Unix/Linux software packages VMware Fusion (~ 100 USD) or VirtualBox (free) for running virtual machines Docker for creating and running software containers Productivity Tools and IDEs I strongly recommend using a JetBrains IDE such as PhpStorm, IntelliJ IDEA or PyCharm (~ 100 USD) Snagit via App Store for creating nice screen shots (~ 50 USD) Scroll Reverser, if you are working with a touch pad and a mouse (on a MacBook) Transmit via App Store, if you need to work a lot with remote FTP, SFTP or WebDAV servers, e.