It has been more than seven years now since I started making Landscape:

Author: carlio <>
Date:   Wed Jan 30 08:42:29 2013 +0100

    Initial commit

What started as scratching my own itch - I wanted something like SonarQube but for Python. I really worked hard to make it easy to measure code quality by detecting bugs, smells and bad practises, building upon the excellent open-source tools that were available.

Two things got in the way. The first was recovering from a bad accident which took a long time and I spend several years without having the enthusiasm to do much coding let alone maintain the behemoth that Landscape had become.

In addition to that, I fell into the standard engineer "if you build it they will come" approach to marketing, meaning that I never got more than a few paying customers - it was always free for open source - and so beyond paying for server costs, it never paid my for my own time and I drifted away from the idea. It became a thankless task - it had 10,000 repositories signed up to be checked automatically which is a huge surface area for bugs to crop up and I was not enthused by adding workarounds and bugfixes for 10,000 non-paying customers.

I tried to keep things going but at the end of the day sometimes you have to pull the plug!

Open Source Libraries

Since Landscape was built heavily upon many fantastic open source libraries, from the start contributions were made back to those and also additional code required to improve Landscape's performance were opensourced too.

Prospector is a command line tool which runs many static analysis tools at the same time, and tries to automatically configure them all for you so they do not overlap and hopefully remove some of the pickier errors or commonly unexpected or unwanted errors. I like to think this is the reason why pylint has changed the first line in the package description to "It’s not just a linter that annoys you!"

pylint-django was a plugin for pylint to make it more useful on Django projects out-of-the-box. Several errors that pylint raises on a Django project without using it are due to not being able to introspect all of the meta-programming of Django. This plugin helped there.

Both of these have been moved into the Python Code Quality Authority organisation on GitHub. I do try to maintain these still, but have also found some excellent helpers who now do almost all of it. They help keep these pieces alive, so at least Landscape can live on with a small amount of legacy.

What Next?

There is still a piece of me wanting to rebuild Landscape from scratch with all the things I know now, and all the tools which became available since the start.

For example, Landscape was using docker containers to run the checks back in 2014, but manually using the Docker cli! Now Kubernetes and Nomad exist, are well understood and mature, that side of things would be a lot easier.

I'm also working on other side projects to keep myself busy.

All in all: it was a fun ride, I learned a lot and did lots of things well and learned a lot from those things I did not do well.

Thank you and hopefully next time you visit this, there might be more information to be had!

If you enjoyed this article and would like to receive email notifications when new articles are published, sign up below:

About is a tool to measure and track code quality and technical debt in your project. It can analyse Python code to point out errors and problems, and provides continuous metrics so you can see if your code is deteriorating.