A Perfect Storm

We’re nearing the end of the year and when I look back at 2020, aside from all the turmoil in the world, more than anything I feel very, very tired.

It largely feels like I have been running from one open-source crisis to another since May/June. Crisises which were outside my control, but had to be tended to anyway.

No matter that a Composer plugin I’m a co-maintainer of was prepared for Composer 2.0 well in advance. When Composer 2.0 was released into the world this October and prevailing CI systems updated quickly, there were still lots and lots of projects which hadn’t updated to the new version we released in June, resulting in support requests and emergency update rounds for various projects.

Along the same lines, while the latest PHPUnit was prepared for Xdebug 3, a lot of real-world projects are not using the latest version of PHPUnit. Again, when the prevailing CI systems were updated to use Xdebug 3 quickly after the release, emergency fixes were needed to prevent projects from being completely blocked by CI code coverage runs failing.

And when Travis finally broke down, and even though they are still not owning up to it, stopped supporting open source, again, there was a scramble to move all CI builds for all open source projects to other CI platforms, which again took huge amounts of time, under pressure, as progress in projects was blocked while the CI wasn’t running.

And let’s not talk about PHP 8.0…

Or actually, maybe we should.

From an open-source maintainer point of view, PHP 8.0 is, not to put too fine a point to it, a nightmare. Don’t get me wrong; I love all the new features and I compliment and thank everyone who has contributed. I can’t wait to start using the nullsafe object operator or union types once projects I work on drop support for PHP < 8, but that will be another few years at the very least.

In the meantime, I had to prepare projects, or help prepare projects for the fall-out. And fall-out there is.

Combine the engine exception changes with union types, which now allowed for adding lots of new type declarations to PHP internal functions, and you get a release that throws fatal errors on code that worked perfectly fine without even a notice or a warning in previous PHP versions.

Top that up with changes in return types for some pretty commonly used functions and you get code that may end up doing the complete opposite of the originally intended behaviour, again without any warning or notice in previous PHP versions.

And while static analysis tools can guestimate where there may be problems in your code, as these changes are all related to the run-time value and type of variables, the only sure-fire way to detect these fatal errors and behavioural changes is to run the tests on PHP 8…

This brings its own problems as lots of open source projects which – for their own reasons – support a wider range of PHP versions than just the latest and greatest, were still using PHPUnit 5/6/7 to run their tests on PHP 7.4 due to the addition of the void return type to fixture methods in PHPUnit 8.

So, instead of being able to focus on fixing their PHP 8 problems, these projects now first have to find a way to get their tests running on PHPUnit 4 to 9.3+ and have to pay the technical debt they had built up from not doing so earlier.

A small project like PHPUnit Polyfills, going from first public mention to over 50.000 downloads in just eight short weeks, testifies to the amount of projects which are scrambling to make their test suites PHPUnit cross-version compatible.

And that’s for the projects which have tests.

The unfortunate reality is that a significantly large number of projects do not have unit tests or when they do have tests, those only cover a small portion of their codebase.

So, again, instead of being able to focus on fixing their PHP 8 problems, these projects now first have to raise their code coverage by writing additional tests.

And let’s not forget the difference between testing the happy path versus the unhappy path. A significantly large number of tests in projects only test the happy path, while the problems created by PHP 8.0 lie mostly in the unhappy path.

So, again, instead of being able to focus on fixing their PHP 8 problems, projects now have to write even more tests to make sure the unhappy path in their code is sufficiently covered.

Are you feeling the pain yet?

And don’t even get me started on named parameters in function calls. A change that was voted in late July, suddenly makes parameter names in function declarations part of the public API.

This means that every single function declaration in the public API of an open-source project has to be reviewed for those parameter names being suitable for public use, as as soon as PHP 8 came out, changing any of them will now be a breaking change.

Now doing this for your own small, 5.000 lines of code, pet project may be a one-day job, but having to do this for a 500.000 line codebase in one of the most extended pieces of software in the PHP world, where nearly everything is public API, in just four months… well, you get my drift.

Of course, you may say: “but a project can indicate it is not compatible (yet) with PHP 8 in the version constraints in their composer.json“. You are wrong. As that presumes that the software will be installed via Composer, which for projects with a large non-technical userbase is rarely the case.

Open source projects, which basically are expected to be cross-version compatible by the release date of a new PHP version, now have to break with the past and actively declare themselves incompatible or “alpha-compatible” with the latest version of PHP for the time being.

And that is presuming those projects even keep track of changes in PHP ahead of a release and don’t just look at the changelog or migration guide for the first time once the release has come out.

With all that going on, the barrier for updating legacy code to use a more modern PHP version has gone up exponentially and for some, may even have become insurmountable.

I believe PHP is doing itself a huge disservice by not making these changes opt-in. It feels like it’s lost touch with a significant part of its user-base and that the impact of these changes has been grossly underestimated.

Yes, these changes are all nice and dandy when you work in a closed-source environment, where everything is under your control, you only have to deal with one PHP version at a time and get paid to write tests for the code you write.

However, for the majority of unpaid, overworked open source maintainers, working on software that is extended in ways they never imagined when the project started, these changes are a huge additional burden to carry, especially with the added time-pressure of having to be ready in time for the release of PHP 8.

I have seen beautifully coded projects, which are largely unused and some of the ugliest code I’ve ever seen is in projects used by millions.

Historically PHP has always been a very forgiving language. Now, that “contract” with the dev users has been broken.

Why force a “one way” of coding upon everyone? Why, when things are a significant break with the past, not make things optional?

I’d be the first to take that option. But the whole thing about it being an option is that it puts the power in the hands of your users, which is where it belongs.

While I laud the progressiveness of the changes in PHP 8.0, the reality is that 40.0% of all PHP servers still run PHP 5, 53% of that PHP 5.6, which means 47% still run on PHP < 5.6. *

There is just a hell of a lot of legacy code out there.

It’s all nice and dandy to believe that everyone has always named parameters in a sensible and descriptive manner and that everyone uses strict type checking and strict_mode already. It’s a wonderful illusion to believe that everyone manages their dependencies with Composer using strict version constraints. The reality is very different and I live in that reality.

So I join Derick in asking: please, please have some more emphpathy.

Let’s try and be kinder to each other. Take a moment to gauge the workload a proposed change will cause for maintainers of open source projects. Not just for your own small pet-project, but for the big, huge projects which run the internet.

Consider whether it is realistic to expect them to push EVERYTHING ELSE to the side and get every contributor they can scramble together to focus 100% on fixing the fall-out caused by your change, knowing that even then, chances are they would still not be ready in time for the release of PHP 8.0. If that’s the case, then maybe, just maybe, your change should be an option and not be forced upon the world.

I wish you all time to reflect and hope that 2021 will bring some light to the world again.

PHP Community in the Time of Covid-19

For me, 2020 started out as a great year. A company trip to Marrakesh (where I went ziplining for the first time ever); attending the annual PHPBenelux conference; being accepted to speak at PHPDay in Verona; and giving two talks at ConFoo in Montreal, followed by a week touring around the provinces of Quebec and Ontario. Three continents in three months: the world felt such a wonderful place.

It’s true that there were stories on the news about a new virus that was affecting people in some countries; but at the time it didn’t seem that it should be a cause for concern, it would be contained like Ebola had been contained. Within a week of my return from Canada, the company that I was working for decided that there was some risk of contagion from working in the office, and sent everybody to work from home. Then the government issued guidelines recommending working from home wherever possible, and to avoid public transport, for people to limit shopping trips. But even then, it didn’t seem likely that it would be for more than a few weeks.

I was lucky: having replenished the contents of my fridge the day after my return from Canada, and having just bought a big pack of toilet rolls, I could survive a few weeks of working from home. Even in an office environment, we work in an industry where online communication is normal – e-mail and slack channels for team communication; GitLab for the code repository and the CI pipeline; Cloud deployments to GCS; Jira for ticketing; Confluence for documentation; VPNs for secure remote access – so the move from an office to WfH isn’t technically difficult. Just add Google Hangouts for stand-ups and sprint planning/retrospectives and remote meetings. Some people enjoy working from home: I’ve always preferred working in an office, with people around me, but I could adapt for a week or two.

But as those weeks soon became months, and the whole world went into lockdown, it became clear that Covid-19 wasn’t something that would easily be contained.


PHP User groups also stopped meeting, in compliance with national guidelines and restrictions. Around the world, the wave of PHP conferences and events that normally fills the Spring months started to postpone, and then to cancel. Sadly, some of these events may never happen again. The majority of PHP conferences are community events, run by individuals or small groups, just trying to break even on costs to keep ticket prices low, often with the organisers risking their own money in up-front deposits for the venue. And as the months of restrictions lengthened, the conferences that normally take place in the Summer and Autumn months were keeping a close eye on the situation in case they had to cancel as well.

I’ve always tried to attend local user group meetings and conferences when I can. They’re not simply a way to learn about new tools, new approaches to coding, new features of the language, or the framework or CI tools that I use every day, and new skills to apply to my work; they’re also an opportunity to meet with other developers, to share war stories, chat about the problems we all face in work, and perhaps find solutions; a chance to get to know the people behind a social media nickname; and perhaps to work together with others on an Open Source project. Whether it’s attending presentations or participating in hackathons and the (in)famous “hallway track”, I have learned so much from user groups and conferences and met so many incredible people that have helped shape me and improve me as a developer.

2020 seemed to be having other ideas – the year that had started so well was turning into a nightmare – and the months of restrictions dragged on from Spring into the Summer and Autumn.

But as it did so, conferences and user groups began to react to the new normal and to adapt.


I’m based in Amsterdam, and my local conference is the Dutch PHP Conference that normally takes place at a venue about 20 minutes bicycle ride from my apartment. DPC 2020 chose to go online, broadcasting video of the talks (and making tickets free of charge). I did get to give my talk at PHPDay Verona (although sadly I never got to see that beautiful city) through video from my apartment. WeCamp, the intensive week on an island in the middle of a lake in the Netherlands, where I was a coach last year, turned into a virtual one-day online conference (incredibly, still including the pirate game in an online format). And last week I attended SymfonyWorld online.

User groups to have turned virtual, hosting video events. PHPBenelux has been meeting virtually for the last few months, and I gave a remote talk at PHPMinds last month.


We are an industry that works with internet technologies, so it seems so natural that we should turn to the internet as a solution for virtual conferences and user groups. And there are some real benefits as well. It means that attendees don’t have to travel and find accommodation in a new city for an event, but can attend online conferences anywhere in the world (always being aware of timezones, of course).
Event organisers don’t need to worry about the venue and food (which requires large up-front deposits before they know exactly how many people will buy tickets). Events that have been single-track until now can go multi-track online. Of course, you need the bandwidth to broadcast the event (and using a service like Hopin to provide this carries its own costs), and your attendees need the bandwidth to watch and listen. Events can attract speakers from all over the world without worrying about the costs and logistics of international flights, visas, and accommodation.

There are still lessons to be learned in how online events can try to recreate all the best features of an in-person conference or meetup, and these events are still experimenting with ways to improve the online experience, but they can also capitalise on some of the new benefits that the use of technology can provide.

For speakers, there’s no direct feedback from the audience during their talk, no way of knowing if a joke has been appreciated, or whether they are talking at too high or too detailed a level for their audience, to adapt their talk if necessary. Providing a chatroom alongside each talk allows the audience to ask questions, which the “room” MC can feed to the speaker, or bundle up to ask at the end of the talk. And as all presentations can be automatically recorded, they can be posted publicly online later for the benefit of those who couldn’t attend the event live (with the presenter’s permission, of course).
Or talks can be pre-recorded, with the speaker actively participating in the chatroom, answering questions and interacting with their audience; but neither fully recreates the experience of speaking in person in front of a live audience. Pre-recording talks is something new to many regular speakers, and will take some getting used to (at least for me). I’ve already invested in a better webcam, but probably need to get myself a green screen, better microphone, better lighting, and a/v editing software as well.

Group breakout rooms can provide some elements of a hallway track, although it doesn’t have the same “feel”; and it isn’t easy to just break open a laptop and work on something together.

Many conferences pride themselves on their “social”, which is always a good way to meet and chat with the other attendees; although many “socials” revolve around the bar, which isn’t so good for people like me who don’t drink alcohol. In recent years, conferences have often combined the social with something like a games evening, playing board or card games with other attendees; and this is an area where online conferences have an opportunity to excel.

SymfonyWorld ran each talk twice to cater for attendees in different timezones, which meant that it was possible to attend talks that would otherwise have clashed in the schedule (kudos to all the speakers that attended both in the chat to handle Q&A); and also provided a special room that hooked you up with another (random) attendee to chat, making it easier to meet new people. I know that they also ran a hackathon as part of the conference, but I didn’t attend that so I can’t make any comment about how successful it was online.


As we look toward the New Year, and the expectation that Covid restrictions will be with us for several months more (at the very least, despite the announcements of vaccines) then these virtual events will remain the lifeblood of the PHP Community for much of 2021.

The online experience will improve further as events experiment and learn from each other about what works best, discover how to overcome the logistical problems of online organisation, how best to use the new benefits that a virtual event can bring, and how to improve the user experience for attendees. Speakers will learn to adapt their talks to the new medium.

I don’t have any figures to back me up, but I would imagine that the costs to run an online conference should be cheaper. Venue and food is always a large part of the expense for face to face events, together with the travel and accommodation for speakers. Sponsors are always necessary for a community-driven event to help offset those costs. While using a service like Hopin isn’t free, I can’t believe that it would be as high, even with some of the “enterprise” extra features of the platform.

Perhaps community conferences (especially those that still charge for tickets) can start paying speakers to help offset their costs of preparing and giving their talks, to offset the time and effort (and financial investment) of adapting to the online presentation, helping to attract new speakers, and a more diverse line-up… I’ve just received an e-mail from GrUSP (the confederation of Italian PHP User groups that organises PHPDay (and I do still want to visit Verona some day) saying that they will be granting each speaker a sum to cover the costs of preparing and giving their talks. Pre-recorded talks also make it easier to add captioning (or even subtitles in another language), making content easier for both a speaker and an audience who may not have good foreign language skills. While this does add extra cost, I believe that it is a real benefit in making presentations available to a broader audience.


So a big thank you to all the event organisers that have adapted to make their events virtual despite all the difficulties that 2020 has brought, which allow me to keep learning and improving myself. And there are still costs involved when running an online event, especially to provide those additional features that help make the event more interactive; and sponsors are still important to help reduce those overheads, particularly for events that are ticketed as free events. So another big thank you to all the companies and businesses large and small that provide financial support to organisers of online conferences and meetups.

And a final thank you to all those individual members of the PHP Community (who I have met through conferences and user groups) that have reached out to me and helped me survive this year.

Take time for yourself

Now more than ever, the lines between work and not-work are blurred. Home working, Slack on our phones, the need to keep up with technology and a million other reasons means that disconnecting is hard! I’m self-employed and the feeling that I should be working is very real and strong.

At the beginning of the pandemic, when the UK went into its first lockdown, I struggled a lot. I found it hard to concentrate on work and it seemed that I wasn’t getting enough done. I spent more time at my computer to make up for it. As you can guess, this did not result in more or better work.

It was difficult, but taking time for myself was the key to re-balancing my life.

I was surprised by how unproductive it felt to read a novel or play Switch when I felt that I should be working. I’ve done it before. One of the reasons that I went self-employed was to give myself flexibility, after all. Somehow I had forgotten how to do this in the latter half of 2019 onwards; there was always something more important to do.

However, it is important to take time for yourself. Your health will suffer and there is a risk of burn out. Some form of exercise is good for the human body and while it can feel abstract, activity and general fitness makes a difference to our mental health too. This is the magic of endorphins which generally lift our spirits. Motivating myself to exercise regularly remains something I continue to work on, but I see the benefits when I do.

Many articles have been written on burn out, so I will not labour the point here. I think that it’s best described as prolonged job stress which leads to physical and mental exhaustion. No one wants this; it leads to apathy and poor work. A good proportion of those of us in tech are here because we love doing it. Feeling apathetic about the work we love is a very strange situation to be in. Avoiding burn out is worth it!

We need time away from work to recharge; to take care of ourselves.

There is a temptation to make your non-work time mean something, but there are no rules here. You are allowed to do nothing; it’s okay. You can do something; that’s okay too.

There are a number of ways you can approach this. I found that I needed to actively change what I did in order to not fall into the routine of heading back to the office to work. Habits aren’t the easiest to change, but equally new ones can stick.

Of all the types of exercise available, I’ve found that simply walking has stuck the best for me. Going for a walk isn’t the best exercise, but I’m operating on the policy that something is better than nothing. I find that going for a short walk in the morning after breakfast, before I start work, works best for me. I have friends who go for a walk at lunchtime. The time doesn’t matter, but getting outside if you can is good, even if it’s dark or overcast as it is here in the UK at this time of year.

In the evenings and for set times at weekends, I turn the computer off. When the computer is off, there’s a barrier to working on it as you have to wait for it to boot. Not much of a barrier, but enough for me to do something else.

Having convinced myself, and hopefully you, that taking time for yourself is a good and worthwhile thing to do, what can you actually do?

Nothing’s off the table.

  • Stare into space, but don’t doomscroll!
  • Listen to Spotify. Losing myself in music is a wonderful way to relax. Find a friend and share a Spotify Group Session if you can.
  • Read a book. I like novels and biographies; others like self-help books. There’s plenty of choice but avoid job-related topics.
  • Play video games. I like my Switch for this and have many hours in Breath of the Wild and, more recently, Civilization. Mobile games work too.
  • Watch TV. Streaming services make it easy to watch what you want to, at the time of your choosing
  • Exercise. As I’ve noted, walking for me, but an online fitness class or fitness programmes like Zumba or Ring Fit Adventure is good if you don’t want to leave the house.
  • Take up (or return to) a hobby. I photograph trains and go out into the fields so also get alone time. Friends of mine do woodworking and others do craft projects sent to them monthly.

What about hobby programming? Good question. Sometimes it can work well. Especially if it’s in a technology/language that is not your day job. Avoid the temptation of doing a bit extra related to work. Tread carefully here and you can add it to the mix. I have a small hobby photography app that I do two to three hours a week on, but never in the evenings or weekend afternoons.

It’s hard to balance your life.

It’s really hard to get over the hump of feeling like you’re wasting time and should be doing something more worthy. It took me months into 2020 to get to the point where I am comfortable playing Switch or reading a book all day on a Sunday.

Most importantly, give yourself permission to relax. You’ll be better for it.

Learn Another Language

The PHP community is a global community composed of software developers, writers, translators, support specialists, speakers, and teachers. It’s more than just PHP core. The PHP Community consists of projects like Laravel, Symfony, WordPress, Drupal, and Craft CMS – just to name a few. While the source code is written in English, it’s just one aspect of these projects. These projects are built on contributions from people around the world, who are writing and speaking about and sharing their love of PHP with others. They’re able to do this, through their knowledge of other languages. It’s their bilingualism that enables them to share their knowledge – beyond the English only audience.

Many Reasons to Learn a Language

It’s possible to go your whole life speaking a single language – particularly if that language is English. People do it all the time. Yet there are many more people, who have learned a second language, to varying degrees of ability. English is the language of business, as well as technology, which is why so many people learn it as their second language.

There are many reasons to learn a language. It’s a powerful thing when you connect with someone in their language. It’s a demonstration of respect. But more importantly, it can open up your possibilities to a much wider world. So if your first language is English, you should consider learning a second language. If you were to read some articles about why you should learn another language, these are some of the reasons, that will likely be mentioned.

  1. Connect with people
  2. Advance your career
  3. Enhance your brain health
  4. Deepen your connection to other cultures
  5. Become more open-minded
  6. Speaking a foreign language makes you sexy
  7. Better understand your own language
  8. Improve your travel to other countries
  9. Consume content in the original language
  10. Boost your confidence
  11. Become more well-rounded

There are also some unexpected benefits. One benefit I’ve noticed through learning Spanish is better understanding why Spanish speakers say things a certain way when they speak English. It’s like a light bulb, turning on in your brain. I’m far from proficient in Spanish, but it’s very motivating when you make these discoveries while you’re learning a language.

Multiple Programming Languages

Throughout our experience as developers, we’re encouraged to learn other coding languages. In part, it’s because a given programming language is best for certain types of applications. However, we also learn that other programming languages give us exposure to different types of problems and alternative ways to express our ideas in code. Speaking another language can give us similar benefits.

What’s kind of funny, is you don’t normally hear about programmers touting the benefits of learning to speak multiple languages. But it would be great if they did! That’s something I’d like to see more of. After all, aren’t people the reason we create our applications? Knowing how to speak multiple languages provides you with the opportunity to connect with more people – more potential employers, more colleagues, and more potential clients.

“If you talk to a man in a language he understands, it goes to his head. If you talk to a man in his language, it goes to his heart” — Nelson Mandela.

Polyglots know that word-for-word translation isn’t a good idea. Automated translation is just as bad. While it can be helpful to understand the idea of a sentence, it’s a terrible idea to rely upon Google Translate. The famous quote “All your base are belong to us” is a hilarious example of translation gone wrong. This was used in the 1989 game Zero Wing by Toapian when the game was translated from Japanese to English.

Which language should you should learn?

With so many different languages spoken in the world – How do you choose? There are several factors you can use in your decision. One could start with what’s practical. How many people in the world speak a language? The higher the number, the more opportunities you’ll have to practice. The United Nations has 6 official languages – Arabic, Chinese (Mandarin), English, French, Russian, and Spanish – which they use to communicate. Each one of these languages has a significant population that speaks it.

Another consideration is: what languages are around you? What does “around you” mean? Perhaps there’s a language in your family. If your relatives speak little to no English, learning the relative’s language is a great show of respect. It’s also a great way to strengthen familial bonds. My paternal grandparents came to New York from Ireland in the late 1920s. I love the idea of learning to speak Irish, despite it not being widely spoken in the world. There could be language opportunities within your social network. When one or more of your friends or colleagues speak a language, it’s another opportunity to learn. Conversely, speaking another language is a way to expand your social circle. Perhaps your significant other speaks another language. This alone will provide an array of daily opportunities. Do you live in or near a language community – Chinatown, Little Italy? Perhaps something less formal, but still somewhat cohesive. When I moved to NYC, I targeted Queens as a place to live, so I could practice my Spanish. There’s a lot of language diversity in Queens, which bodes well for other language learning opportunities. Do you want to travel to, or perhaps move to another country? That’s an excellent opportunity to learn another language. What kind of food do you enjoy? Food and language are the two major parts of culture. If you enjoy a particular cuisine, being able to order in that language is great. Are you someone that values accessibility? Consider learning the sign language for your country. In the United States, Deaf and Hard of Hearing people use ASL (American Sign Language). I think even some people in Canada also use ASL but don’t hold me to that.

Since you’re a member of the PHP community, you may have additional motivation to learn another language. Do you have a hero in the PHP community? Learning their native language is a good way to create a bond with them. How impressive would it be, if you were to have a conversation with them in their native language when you see them next at a conference? I bet they would be quite impressed.

No matter which language you choose, you should know a language can’t be taught, only learned. Here’s a video with some tips to help you learn a language like a polyglot, from a talk at a language learning conference.

Finally

There are many benefits to learning to speak another language. We spend so much time learning programming languages, but sometimes, it seems like we forget that we write code with people, and for people. It makes sense that we should continue to improve our ability to communicate with people and widen the pool with whom we can communicate. It’d be great to hear about more developers learning another language. It’s a personal goal of mine to give a technical talk in another language at a conference. For me, that language is Spanish. Some people in the PHP community have already achieved that goal, and I applaud them for achieving it.

We’re one big software engineering community

I started my software engineering journey as a fresh faced web developer, making my first salary by creating websites with PHP. It became my tool of choice. I was a PHP developer, and after a while I became pretty good at it, too.

As part of that process of getting good, I started to see that there were other things that other people were doing, as part of my development team. We had UX experts, and testers. We had systems folks who looked after the servers. We all worked together, and our skills came together to make a better product than we ever could.

But I was the PHP developer, right? I had no business doing the testing. That’s the job for QA. If there was a server problem, I threw the details over to the operations team and assumed it would be fixed.

It was at that point, I started to wonder how I could grow next. What my next move would be. I just would get really good at PHP, and dazzle everyone with what I knew. I mean, really good. So good, and so dazzling, everyone would be complimenting me on my PHP.

What I didn’t know at that time, is there’s more to being a great software engineer than being great at PHP. I knew that a team which works together will make great things: but I didn’t realise that if I knew a little about those other disciplines, I would be a more effective and more useful member of that team.

A useful member of the team not only has the ability to fix the development server when it goes wrong, or gets their hands dirty with some testing when there’s a backlog in the testing column. But they also have the ability to empathise with the other disciplines of the software engineering team. The ability to ask the correct questions, maybe even know the answers themselves. To know why a decision has been made to go one way, rather than the way that’s easier for the developers.

The Covid-19 pandemic has been a world-changing event, suddenly forcing us to come up with some new normals. At least, for a little while. One of the benefits of this is we’ve found ourselves doing more virtual community meetups, which anybody around the world can — if they so desire — join, or even watch a later recording of.

This will almost certainly continue into 2021: and might even bring us a whole raft of virtual, online meetups, continuing far into the future. A future where we can return back to sitting in a room together. But a future where we can do both.

So let’s make the most of this new, virtual future. We have a future where we can join any online meetup in the world, whatever the discipline. There’s so much knowledge out there both within and outwith our primary skill.

And who knows, it might even make us all more useful members of our teams.

A WordPress Dinner Party

At the top of 2020, I observed my fifth anniversary of being a sponsored contributor to WordPress, and am proud to say I led the first all-women and non-binary release team in our project’s history. When I applied for the position, I was an advocate for diversity in technology, and I hoped this was a chance to make my time more impactful. I came to the work without any preconceptions of what open source was or should be. I didn’t even have a strong concept of the “best ways” to increase diversity. I just had my experience, my self-taught notions of leadership, and a desire to bring people together toward something bigger.

During my first year I met so many people, but especially sought out other women and people of color. WordPress had always seemed to be an oasis of welcoming in a field that is known to be the opposite, and I wanted to compare my experience with others like me. I felt that I had found a community with the contributors I met, that we had common ground.

And in 2017, I had this startling moment of doubt.

Chairs at the Table

I had responded to a hashtag on twitter (#WITBragDay) this way:

“I don’t know if I count as “in tech” but I fight for and inspire women to be in tech.”

Amid the support from fellow contributors, I got a message asking why I thought I didn’t count. And I had too many answers.

  • I’m non-technical (in an OSS project).
  • I’m a woman (in a male-dominated field).
  • I’m a person of color.
  • I “just work with people”.
  • And countless more.

Which led right to the question: “Why do you want to inspire other women to be in tech… if you feel like you don’t belong in tech?”

I assumed I was alone in feeling like I didn’t have a place at the table. I assumed that everyone else knew their value, and skills, and could advocate for themselves once they arrived. And my role was just to make sure we had enough places for people to be.

But when I’m leading others, I always encourage people to ask their questions publicly, because you never know who else is too shy to ask the same question.

So I started asking questions.

Place Settings at the Table

I asked my mentors about their early experiences of WordPress contribution. I asked rising contributors when they felt they’d had their first success. I asked long standing contributors about their journey. And I asked people who stopped contributing what led to that decision.

I approached this problem like any project I plan: by getting all the info in one place, looking for risks, and making plans to avoid risks.

So I asked people to start making small changes with me. Little process tweaks in one team, a borrowed welcome wagon concept from another. Nothing major, just being a tiny bit more proactive with our burden of proof so that when diverse voices joined us, they knew they belonged and had some idea of where to go. And contributors took these little changes, modifying them to fit their teams like any good open source community would do.

More Tables and Chairs and Settings

The community kept building on those changes and kept inviting others to join in. Small training cohorts were attempted. There were people who loved documentation (lowering barriers to entry); people who loved mentoring (helping others find their way); and people who just wanted to help any way they could. Then late in 2019, I shared that I hoped for an all-women release by the end of 2020.

It honestly made me nervous. We aren’t perfect, and there were so many things that I thought were missing.

But there were also so many people who wanted to participate, from brand new contributors to OG developers. So we did it. And the release team for WordPress 5.6 was massive. Not because I wanted volume, or because I was playing to the numbers, but because I had observed that our community enjoys learning shoulder to shoulder. Learning by watching, then doing, then trying again when we fail is a key part of how open source works, so it’s a key part of how I wanted to be able to introduce this team to the work.

A Great Dinner Party?

Did I do everything right? Definitely not.
Would I do it again? Maybe.
Was it worth it? Without hesitation, absolutely.

The latest release of WordPress, while a massive undertaking, was the culmination of years of work by hundreds of contributors. Not all of them knew that their contributions would lead to this, and certainly not all of the release team knew about the work that came before them.

But isn’t that the beauty of open source in the end? That we benefit infinitely from the work of everyone who came before us, yet can still find ways to bring new benefits for those who come after us? And if this long labor of love encourages even 10% of the release team to return, I will consider it a truly great dinner party. 🙂

Code quality

Up to this day, PHP still has bad fame. When you are starting working professionally, that might give you a bit of impostor syndrome, because you think that you are not good enough to use a “good programming language” as other people you know. You think that you will become a good programmer once you are able to learn and work with a “professional programming language” such as Python, Java or Go, and stop playing around with toys for children like PHP.

However, as days, weeks, months and years pass by, step by step you are becoming more experienced —that is, if you have the right attitude, the appropriate gaze. One month, you start using a framework that ease your work. Another day you get a grasp on how good and helpful Composer is. Then you start worrying about testing, architecture, design patterns, code readability, SOLID practices…

I think it is sometime in that stage that you start to realize that good or bad code does not have much to do with the programming language or the tools you use regularly, but with other things that may not be technical —it can come to our minds what Heidegger wrote: “the essence of technology is by no means anything technological.

Let me tell you a personal experience at this point. I used to work with someone with a few years of experience in web development whose main and only metric for code quality was the number of files you needed to write code to. Not security, not optimization, not code readability. Just the number of files you used to implement a feature. The less, the better. Moreover, he did not doubt to cut all the corners he could while implementing a feature so it was finished earlier. Because of that, management was happy with him: he was fast, so it was cheaper to deliver and it increased revenue for the company. Of course, no one took into account the number of bugs he had to fix, but he was fast doing it, so it only helped his reputation.

When he left the company after several years, we needed to take over his code. You can imagine it was easy to find controllers with more than 2,000 lines, containing duplicated paths and logic, without a single type or comment, exposed to SQL injection… We tried to prevent these kind of practices, but it is hard to battle non-sense using common sense. Had he used Go, C or Java, the magnitude of the disaster would have been the same — or worse. Quality is not about the programming language you use. It is about the person who writes the code: it is not that my colleague was not competent, he actually was pretty skilled. So I would say more: code quality depends on the gaze of the person who writes the code. It is about how you think about what you code, not the tools you use; the same way a good writer would write a masterpiece using a computer, a typewriter, or a pen.

We are now improving those projects a bit. In this arduous task, PHP with its environment is extremely helpful. We are implementing layered architectures using Symfony and The PHP League packages; testing where possible using PHPUnit or Behat. And we plan to integrate in our deployment quality tools such as Psalm and PHPStan. I think we have a promising future in front of us.

Before finishing, one might think that we did not answer a question that could arise from the text: “What is good programming?” But that is a hard question that we shall try to answer another day.

The “Self-Taught” Illusion

We all learn through our life, from our childhood to our retiring age. As children, we learn a lot from our parents or other family members, and later from friends, about socializing and other things we need to grow up. Later we learn through teachers in schools in many different subjects and after that, we choose to study what we need to know to be successful in our jobs. Life is impossible without learning. Live and learn.

As developers we actively learn through books, documentation, workshops, or just “by doing”, driven by our interests, curiosity, and the will to improve our skills. Sometimes there seems to be nobody to help or teach us during some stages in our lives and we have to take care to teach ourselves. Skills and knowledge are considered to be self-taught. After years of success and setbacks, we can look back at our accomplishments and a hard path that lies behind us in the past where we invested effort and time to enhance our abilities. Even during a strange year like 2020 there still was one or another achievement that made us better in what we do. Well done.

The other side of the coin

Of course, there were many people in our life who helped us to become better at our jobs, but too many seem to be convinced that it was mostly their effort that made them grow in what they are doing.

Unknown aides

What about you? I’m pretty sure you can name some people who influenced your growth and taught you some crucial knowledge about a framework, the language itself, or some good performance tweaks. But the truth is that there were many more people involved in your work-related progress than you can guess. People you didn’t meet in the past or even never heard of. If you ask yourself “How can this be?”, then I’ll tell you one name that helped me to come closer to PHP after I was looking for a new programming language to learn: Dieter Staas. I never met him. I don’t know what he looks like. While I’m writing these lines I even didn’t know that name a few minutes ago. He’s the author of a PHP book with the simple title “PHP 4”, a book about PHP 4.0 that I bought a very long time ago and that helped me in my beginnings of PHP when I wanted to write something different than C#, ASP or ASP.NET. I still have this book and after all these years I took it from the shelf just to see who had so much influence in my developer life that even affects me today because everything I know and do as a PHP developer was built upon that past.

But it’s not only about book authors (or blog authors). There were and are more people out there who have influenced your progress or your solutions. Yes, I’m looking straight at Stackoverflow. Has anyone ever opened the entry page of that site instead of accessing it over a search engine’s result page? There are so many people offering their help and solutions to problems and it became a regular problem solver for developers like you and me. It was so popular that it even became the target of jokes. Many of you might already have heard about the Exception class that creates a link with a search query to Stackoverflow. It’s a funny joke and I’m sure some created such an Exception class. Nevertheless, when I talk about what you or I learned from Stackoverflow, it was always another developer, another name that influenced your solution or decision. The same goes for any other source.

Who wrote that documentation you were reading in your attempt to teach yourself something new? Who wrote that blog post that made things much easier to understand? Who wrote that book that you used to study? There is no learning without teaching, explaining, or helping. Most cases where you thought that everything was self-taught are just another case of someone teaching you on your way. Even code itself or tests can (and should) be written in a way that makes it easier to understand and be a source of knowledge presented by a maintainer or contributor. But those names will be easily forgotten just as I forgot about the author of that PHP book.

Forgotten but never gone

I want to thank all the unknown developers who helped me to become the person I am today. It’s weird to share my appreciation in such a manner with you but, the sad truth is, we still will forget the names and internet aliases of those who were helpful on our path of improvement. This is going to happen even after realizing that we’re not as self-taught as we thought. But that’s why all that help can’t be taken for granted and before we give thanks to the unknown developer many years later, we should give our appreciation exactly when we learned something new or had other benefits by the help and work of others.

What we can do is:

  • Simplest way: Say/Write “Thank you”
  • Upvote a comment, blog post or video of the author
  • Write how the content helped you with your problem
  • Support their work

Or short: Make them aware that you liked what they did and that they made you a better developer, even when it just was in detail. And after that: Start to be helpful for others too.

Forgotten, but never really gone.

Community wrangling is hard!

Something that many folks who know me, know about me, is that I tend to have a habit of rushing in where angels fear to tread. Call it blind optimism, call it stupidity, but whenever there is a need, I rarely think about the consequences and blast headfirst into getting involved, in order to help out.

The words “how hard could it be?” are something I regularly say to myself.

In 2016, after I discovered and officially became part of the WordPress community, I was asked if I’d be interested in helping to organize WordPress Cape Town meetups. I didn’t know what a meetup was, or how it worked but, how hard could it be?

Later that year, on a 1 and a half hour flight from Cape Town to Johannesburg, for the first WordCamp in that city, I was asked if I’d be interested in replacing the current WordCamp Cape Town lead organizer, who had to step down. I’d applied to lead in 2018, and therefore was planning on being part of the 2017 team, so I could learn the ropes. It meant I’d go from zero experience to leading the organizing team, and I’d never organized a large community conference in my life but, how hard could it be?

Last year, when the local PHP Cape Town meetup organizer had to step down due to moving to another country, he reached out to me and another member of our community to take over the meetup. I was already an experienced WordPress Cape Town meetup organizer, and I had someone who was helping me this time so, how hard could it be?

At the end of 2019, after offering to write a post for this very blog, I was asked if I’d be interested in helping to organize it. I had no idea what went into organizing/planning a yearly series of blog posts, every day, for the first 24 days of the month but, how hard could it be?

In case you’re wondering, the answer to all those questions was, pretty damn hard!

Because not everyone is like me. Not everyone rushes in where angels fear to tread and has time to speak at a meetup/help organize a conference/write a post for a blog in a short space of time.

And that’s ok. Those of us crazy/stupid/willing to do this will keep doing it. And those who aren’t, are very probably way better off for not doing it, and I respect them for it. And in every community, there are those who want to volunteer and those who don’t, and that’s ok too. Neither group should vilify the other for doing what’s right for them.

If 2020 has taught me anything, it’s that my involvement in the various communities I belong to is vital to keeping me sane, and I do it because I want to, not because I have to.

What I need to start remembering is that it’s always harder than it looks.