Software Engineer
Consultant / Architect

Joshua Thijssen

logo

What I Do

Development

With over 25 years of professional development experience, I've probably seen it all. From writing Solaris kernel drivers to writing software to detect bad cucumbers and everything in between. My passion is about finding out how things work by (re)creating them from scratch. One of the reasons my (uncompleted) projects consist of an RDBMS system, a multitasking operating system, and even a completely new programming language.

Nowadays, I spent most of the time on the web, developing both the infrastructure and designing the architecture of small and large scale applications. Even though I'm more comfortable with development on backend systems like APIs, microservices, high-performance toolsets, and CI/CD systems, I do dabble a bit frontend as well. Libraries like React and languages like JavaScript are no strangers.

System Administration

Not only development but also System Administration is part of my passion. Growing up with Linux, I've seen the transformation from physical hardware in data centers, to containerization on cloud providers.

I've come to realize that most of the significant happenings in system administration are about abstraction. While abstracting away the various layers can be a good thing (removal of the physical network, servers, and even the move from applications to lambda functions), it doesn't remove the need for knowledge. Far too often, I stumble upon incorrect VPC setups and insecure configurations because of the lack of understanding of the tooling used.

Consultancy & Training

Besides all this, I spend time on training and workshops on many different subjects ranging from single-day training on tooling to multi-day courses on programming and frameworks.

I've written a few books on PHP subjects like the "Mastering the SPL," the "Symfony Deep-dive" series, and "Python for PHP developers." Because of other priorities, I'm not in the process of writing new books.

I also spent time speaking at both small and large conferences all over the world, talking about a broad range of subjects. Even though I scaled back the number of conferences I speak at (again, priorities), I regularly speak on local meetups.

Dev/Ops

Ask ten persons what DevOps is, and you will get 20 different answers. For me, DevOps is a result: the fact that you don't separate building and deploying/maintaining software as two separate tasks done by two different teams, but collaboration between these two teams right from the start.

This means DevOps is not about tooling. You can't use Ansible and declare yourself doing "DevOps" (well, you could, but you shouldn't). It's also not about developers doing system administration (again, you could, but shouldn't). It's about communication and collaboration between teams, and quite possibly within the same team to achieve a single goal: generate business value for the client.

When done correctly from the start, it automatically results in using tooling, exchanging knowledge, better and more predictable deployments, and no more fear for the deploy-on-Fridays.

Experience

Development

PHP

Even though I started my career with (embedded) C, somehow, PHP always keeps returning. Granted, it's not the sexiest language, and there is a lot of hate for it. But I find that PHP used the right way, can solve many problems with as much ease as any other language. But programming in PHP takes as much effort and knowledge as programming in any different language. You always balance on a fine line between getting things done & getting things pretty.

Symfony Framework

Symfony is one of those frameworks that didn't start from scratch but asked the question: what are the things that make other frameworks function? This all resulted in Symfony (2 and above), which takes the best of other frameworks like Spring and Django. It can be used for small apps to large web applications running multiple services without sacrificing anything in SOLID practices.

Go

Go is a language that makes sense. It's often coined as "a better C," but realistically, it's way more than C. A lot of system administration and container orchestration is written in Go nowadays, which gives you a large infrastructure of libraries that already have solved the problems you are facing.

Ranging from monitoring systems that run as watchdogs to reporting engines that need to collect information from a large number of data endpoints, writing it in Go makes it a simple job.

Python

If PHP is my first love, then Python is the second one. Even though I still love working in Python (most of the time for writing AWS Lambda functions), it starting to fade away to the background.

I've written a book about moving from Python from a PHP perspective, explaining many of the Python language, infrastructure, and idioms commonly used.

Java, C

You haven't done Java if you haven't done Java Applets. It made a fascinating time in which a single codebase and GUI could be run on both Unix and Windows machines. I still have the books on writing GUI's with AWT.

Even though I don't use it anymore professionally, it's one of those languages I try to keep up with. Funny enough to see that a lot of functionality from Java is gradually getting implemented in other languages like PHP.

Besides Java, C (not so much C++ though), is one of those languages I love. I've written many applications in pure C, which nowadays would be much easier to use other languages for. But try and write a multi-platform library for 14 different Unix-flavours AND supporting windows at the same time (no, Cygwin doesn't count).

System administration & orchestration

Amazon Web Services (AWS)

Experience working on AWS platforms ranging from small $1K to large $100K+ monthly budgets. This includes working with both ECS, EKS, and the majority of components that AWS provides.

Optimizing costs is one of the things I enjoy spending time on. Especially in larger organizations, there is a tendency not to clean up resources or not to re-evaluate the current resources, which can result in spending more money than needed.

Even though I like using AWS, I do not like the whole "move everything to the cloud" part. By this, I mean, I've seen organizations moving everything to lambda functions, which in turn trigger other components, which triggers different lambda's, etc., so you end up with a big mess that is hard to debug. Knowing when NOT to use cloud-components is probably an essential job as an engineer, as it is to understand how to use those components.

Kubernetes

Most of the Kubernetes clusters I've set up are based on Kops. They range from small testing clusters to multi-cluster systems that automatically deploy new microservices with the help of CI/CD streets.

Even though Kubernetes solves many problems in container orchestration, it also adds other problems. Before implementation, I usually research and advice organisations on whether implementing would be even beneficial or not.

CI/CD

With the help of Continuous Integration and Deployment, it makes moving a feature of issue from idea to production much easier, safer and faster. I have a lot of experience moving small and large development environments to a fully automated CI/CD environment. This could be Jenkins, Drone.io, CodeDeploy or (my favourite) GitLab CI/CD.

Certifications

Over 20 Years of Experience

Life would be a lot easier when software engineering would be a licensed profession. Most certifications do not have a standard as high as it should be, so it's not a given that certifications mean better engineer.

But something can be said for having certifications. There is a curriculum, and through an extensive exam, it is acknowledged that you have sufficient knowledge about the subject. Does that make you a sound engineer? Well, no, but it doesn't make you a bad one either.

For me, certifications are an acknowledgment that I've gone beyond the basic understanding of the subject and have mastered the skills.

System administration

LPI 202 LPI Certified Level 2

LPI 201

LPI 102 LPI Certified Level 1

LPI 101

LPI 199 Ubuntu Certified Professional

Puppet Certified Professional

Software Methodologies

Professional Scrum Master (PSM-1)

Development

Zend Certified PHP5 Engineer

Zend Certified PHP5.3 Engineer

Zend Certified PHP5.5 Engineer

Zend Framework Certified Engineer

Symfony2 Certified Developer (expert level)

Database

Sun Certified MySQL 5.0 Database Administrator

Sun Certified MySQL 5.0 Developer

Clients

Helped over more than 50 companies and organisations
client logo
client logo
client logo
client logo
client logo
client logo
client logo
client logo

Contact

Get in Touch with me

Apeldoorn / Netherlands

Freelance Available

How Can I Help You?


A note to recruiters:
Hi there! I do not accept any unsolicited emails from recruiters. I know you have the perfect opportunity with a large business that happens to look for [keyword] developers. I'm very happy with my current network of developers and businesses.