Share your story with the PHPamily

Thanksgiving in the US marks the beginning of the festive season that a lot of the members of the PHP-Community are celebrating in December. It’s the time of darkness, but also of the warm lights. And – most important – it’s the time to gather the family and to celebrate.

These were the words Andreas Heigl used in his opening post on this site, published on the 25th of November 2015, almost 5 years ago.

His goal at the time was simple; reach out to his extended, distributed, PHP-Family (or PHPamily for short) and bring together as many diverse and interesting thoughts and ideas from our community, in one central place, for us to share with each other, learn from each other, and support each other.

A lot has changed over the past 5 years, life as we know it now is very different from then. Many of us are dealing with new and interesting challenges, both in our personal and professional lives. And that’s the beauty of sharing stories from our community, as Andreas so eloquently put it back in 2015.

And as in every family there are differences and there is potential for conflicts. And there are times where we don’t talk to each other. But in the end we somehow manage to at least get along with one another. And the knowledge that we will get along with one another in the end and the knowledge that we all want to achieve awesome things binds us together. And as in every family we can achieve even greater things together.

This year marks the 5th edition of the 24 Days in December site, and we’d like to take this opportunity to invite you to share your stories with us. We really hope we can bring fresh voices to the forefront, so if you’ve never written for a PHP related publication, this is the perfect opportunity to do so.

But what to write? Well, many of our previous contributors have written about the community, or open source in general, or the way the modern web is changing how we live. Some authors picked a technical PHP topic that they would like to share, because 24 Days in December is primarily aimed at PHP developers. Others shared something specific to the year that had passed, and what made it interesting for them. You can find a lot of inspiration in the past posts from previous years. The point is, this site is for you, our extended PHPamily, so share whatever you feel is important for us to think about as this year comes to a close.

Whether you want to write about something technical that is related to plain PHP, a fully fledged and integrated Framework like Symfony, Laminas or Laravel, something about your favorite CMS like WordPress, Drupal, Typo3 or Concrete5, or something that relates to higher level concepts, like open source, the PHP community in general, or your specific experiences as a person working in STEM, we are open to it, and encourage you to contribute.

If you have submitted, and had published, an article to us over the past 5 years, we thank you for your contribution, and kindly ask that you share this post with others in your social circles who you think would be willing to share their stories with us.

If you would like to contribute to this years edition, email us at info AT 24daysindecember DOT net, or contact us via Twitter at @24DaysInDec.

The greatness of the PHP community – Beyond language barriers and countries

I became a PHP programmer in 2003 and used PHP3 at the time.
At this time, I felt like I was doing just my job.

I joined the PHP community since 2008.
At that time, there was a study session boom, mainly in Tokyo area, where study sessions for various programming languages ​​were held.
This was so much fun and I was getting love the PHP community and PHP itself.

Most of the study sessions were held only in Japanese, but some, such as CakePHP, were held with guest speakers from overseas and interpreters attached.
In these sutudy sessions, I realized that Japan is not behind in technology.
Beause the thing that Japanese programmers are worried about is that some people overseas are also worried about the same thing.

There are few people who speak English in Japan, and I was one of them.
So without an interpreter, I couldn’t understand the context, but when I saw ZendCon online, I felt, “What a wonderful conference, I’d like to go someday.”

In 2011, there was the Great East Japan Earthquake. Iwate Prefecture, where I lived, suffered a great deal of damage. A self-defense force rescue camp was set up in the prefectural office, which is very close to my house.
Looking at the scene, I became sad and suddenly thought, “I’m alive, so I’ll do what I want to do as soon as I can.”
And I moved to Tokyo.
In October of that year, I joined ZendCon for the first time.
I don’t understand English at all, but PHP. At that time, I was happy with seeing the programs and diagrams on the slides. And then returned to Japan.

Then, in 2014, I had the opportunity to go to ZendCon again and joined.
Participation at this time will change me greatly thereafter.
At this event where PHP community attendees from all over the world gathered, everyone was kind and fun talking about PHP, and I felt that I love this atmosphere.
If I could speak English, I really wanted to discuss more with some speakers.
I wanted to learn English and communicate more and I really wanted to join this community.

Then I returned to Japan and started studying English conversation.

In 2015, I talked to other participants a little at ZendCon, which moved to Las Vegas. But it’s still just say hello.
Every time I participated in ZendCon, in 2016, 2017, and 2018, little by little, I could talk more.

This year, 2019, I joined PHP [world] instead of ZendCon.
Almost all the participants found that they were very interested in PHP and had a great discussion. I had a lot of fun and the PHP community was really great.

Also this year, I made an English track without an interpreter at a PHP conference in Japan where I attend as a core staff member.

The idea was to create a place where people could communicate in English and hope that more people would be interested in communicating with developers in different countries.

Actually, the number of people who heard the English speech was not so many, but after that, I was able to see the smile and the shine of the eyes of the participants, and I was glad that I did.
I also really thank the English track speakers who came to Japan this year.

My English has not yet reached a level where discussions are possible, but I hope that I can continue to study and become a bridge to the community.

Please join the PHP community in Japan.

As an aside, this year, I created elePHPant for the Japan PHP Conference.
Thanks to the members of elePHPant channel on phpug Slack for helping with the creation.

Christmas Presents

When I was a kid, I admit, Christmas was mostly about the presents. This changed over time as I grew older. Now that I have kids, I admit, Christmas – again – is mostly about the presents. Not the ones I receive or expect, but the ones the Christkind will bring for my kids – if you know what I mean. (In Germany, the Christkind brings the presents on the eventing of December 24th, with the help of some angels of course, because how could a newborn possibly move around all those presents?)

A few years back, when I did not have children yet, a friend of mine said: “Now that I have children, days like Easter and Christmas starts to be more meaningful to me again”. I can relate to this statement, today. But still, Christmas seems to be too much about the presents, and everybody, especially this year, seemed to be really stressed out. We all know that the Christmas we celebrate is not what it should be, yet still we fail to fundamentally change something about it, or at least about the way we deal with it. Admittedly, fundamental change is really, really hard to achive. So why not try some little changes?

At my company, we stopped sending out Christmas presents along with our season’s greetings. Instead, we donate the amount of money we would have spent on the presents. In recent years, we have donated to an orphange, to child care, and to an institution taking care of homeless mothers with their children. It feels good to do something charitable, at least once year. And, let’s face it, there are so many people, young and old, that are more in need than the average IT expert.

This year, my family and I found out that our city accepts presents and hands them to those in need. Apparently, even in the middle of Europe, in rich Germany, close to Munich, where we generally have a pretty decent standard of living, even in the small town where I live, there are people who cannot afford any Christmas presents. We should never forget how privileged we are.

I know I am privileged not only because I made a career in IT, but also because the PHP community helped me get to where I am. Around 2001, I got into writing articles about PHP, then started speaking at PHP conferences and subsequently got into writing books about software development with PHP. Ten years ago, I co-founded The PHP Consulting Company and started to focus my professional efforts on PHP and related technologies.

Over the years, I have been called a “rock star”, a “part of the A-list”, a “luminous figure”, the “Uncle Bob of PHP”, and an idiot, for that matter. The latter characterization was part of a comment somebody had posted below a conference presentation of mine where I had suggested to avoid commenting source code, but instead write the code in a way that no additonal comments are needed. Well, everybody is free to agree or disagree with me on pretty much every technical topic. I know I have some strong opinions and I a publicly state them with a strong voice. It is okay to disagree with somebody. Calling them an idiot just because you disagree is another thing. It hurts. People may not realize, but just because someone is a more or less prominent figure because they are publishing books or online content and speak at conferences, they are still humans, and they do have feelings. And the problem with that one bad comment out of ten is that this one tends to stick.

Giving feedback is difficult, and giving constructive negative feedback is even harder. I know there are people out there who tried public speaking, writing, or publishing an Open Source project, but got discouraged at some point by negative feedback, so they gave up. Creators of Open Source software (or content) donate the most precious thing they have to us: their time. Our time on earth is limited, after all, and there are so many things to do. Still there are people that choose to invest a substantial amount of their time into us, the users of Open Source software. That is like a permament state of Christmas. We get presents all year round. But are we thankful enough?

I do not really believe that anybody creating an Open Source software does it for the fame. Fame sometimes comes as the consequence of years of hard work, but certainly not quickly. They clearly don’t do it for the money. Nobody can live on that odd donation they receive every once in a while, or that little gift from their whishlist. Github has set up a Sponsors program that helps to get some money to the creators. While this may sound like a brilliant idea, I am extremely biased, because I do not like the idea that Github = Microsoft is in control of most existing Open Source software, by making the creators financially dependent on the platform they are developing it on. I know some people use Patreon, but when you give money to Patreon, a good part gets sucked up by fees, plus you cannot get a receipt, so it’s not a real option for companies.

So if it is not about the money, and we assume that it is not about the fame, what remains? The good feeling to donate (their time to us). The good feeling to do the right thing (by creating free software, or knowledge). And we react by no feedback at all (which is bad), or negative feedback (which is worse). Remember, the one negative out of ten positive comments will always stand out.

I am clearly not suggesting to never say anything negative. Progress would be much harder if everybody would always just say nice things. But we should pay close attention to be constructive and not insulting when giving negative feedback. “Please help me understand why …” sounds completely different than “You failed to make clear …”. “You are an idiot” is a different message than “I do not agree with your opinion”. Saying “I see where you are coming from, but in my experience, things are different” will make it even easier to get a constructive conversation going.

When I got into the PHP community, I made it a habit of approaching project maintainers and contributors and thanking them for their contribution to PHP and Open Source. I am still doing this, and even though it may be just a small gesture, it seems to have an impact. Everybody working in or for charity is probably not recognized enough, so: thank you all. And: contributing to Open Source is charitable, even though the tax office does not recognize this (yet).

There is a lot of ongoing discussion about the fact that only a small fraction of Open Source users give back, and a vast majority just takes benefit from other people’s work. I can see where that argument is coming from, but I do not agree with that point. Even the fact that you are using sofware is already a statement. You invest your valuable time into building a solution based on something, that is a statement of your trust into that something.

Of course, we can argue that giving back more actively would be preferable. That could be patches, bug reports, documentation, education for others (for example by writing a blog post, or giving a presentation). How about giving back by more constructive, positive feedback and cutting back on negative comments, on words that could potentially hurt somebody on a personal level.

So regardless of whether you feel that you are already giving back, or if you feel that you have not given back enough to the Open Source community (yet): Let us be nicer persons. This is your entry level way of giving back. It’s free, and it does not even hurt ourselves. In fact, it even feels good.

I think doing this would not only help the various Open Source communities, but also the world at large. And it is so easy to do, yet so very, very difficult to start, because it may require a shift of our views, and a change in behaviour. In comparison, just throwing money at something is so much easier.

Merry Christmas you all.

Declaring a PHP Climate Emergency

The year is ~~2119~~ 2019, and the planet is on fire. What can a mere PHP developer do about it?

It is quite clear that without global political action there is not going to be a solution to the problem of global climate change, but that does not mean action at a personal level is useless or unwarranted. Political solutions will also lead to personal changes, and getting ahead of the curve does not hurt considering we are pretty late to the game.

There are a few fronts on which everyone can have an effect. Personal consumption, politics and advocacy, and funding carbon offsets.

Personal consumption

Using carbon calculators like myclimate‘s (fairly simple) or carbon footprint‘s (if you have time to spend) you can check where you can have the most impact on a personal level.

Household heating and energy expenses are fairly tricky to fix depending on your situation. If you don’t own a single family home you are most likely out of luck when it comes to heating, but you can perhaps at least find an electricity provider which offers renewable energy.

Food is a kind of easy one where reducing red meat consumption is the biggest winner, going vegetarian is probably better but more challenging so take it slow. Reducing is still better than doing nothing. It took me about 10 years to go from an omnivore diet to eating meat once every few months now. If you slowly adjust and learn to cook and enjoy other foods you end up not missing it. You can still enjoy it once in a while and actually then enjoy it properly, instead of having a meat fest at every meal where it is so normal that you don’t even notice.

Travel and mobility in general is also something we can fairly easily impact. Nobody forces you to go across the world for a week of vacationing on a fancy beach. After reading the rather disastrous IPCC report in late 2018 I wanted to stop flying, and mostly succeeded this year with lots of train rides, refusing to go to a few conferences which were too far, and one flight which I could not avoid due to scheduling constraints but ended up offsetting instead.

I can see this unfortunately does not apply everywhere, but trains are a good option in Europe. You can get work done, watch a movie or enjoy the ride looking out the window. All without the stress, strip searches and queues of airports. It takes longer and is often more expensive, but the cost of plane tickets is unrealistically low if you consider the environmental impact, so until governments fix that with appropriate taxes we have to be the grown ups.

I think something to keep in mind is that not every holiday has to be an instagramable beach in Thailand or whatever the latest trend is. Exploring your “backyard” is great too, most countries have beautiful places to see if you get out in nature a little. Go check out the nearby forest or tiny river, it will most likely soothe the soul all the same. That should be the point of taking time off, not posting travel-envy nonsense on social media.

Similarly, when it comes to consumerism i.e. all the other stuff we buy, there is probably no easy fix, but one thing we can try is turn off our phones and social media a little. Look your loved ones in the eye instead, have a conversation, go for a walk, hopefully all this will help fill the gap we’re trying to fill by buying lots of junk and piling it up. You most likely don’t need every latest gadget, a new OLED 3D+ 8K 80″ TV, or a big SUV to drive around town. If you need to spend cash that bad spend it on carbon offsets instead to pay for past environmental sins.

Politics and advocacy

Step 1 is fairly simple: Vote. Please don’t waste away your voice. Vote for the candidates/parties who will most likely enact environmentally responsible policies. The most radical agenda the better, because even if they win that will most likely get watered down. You may not agree with all of their policies, but I would argue that whatever your pet peeve issue is does not matter if the planet becomes an unliveable hellscape.

Fixing the environment is the top priority. Only then will we have enough time left to enjoy arguing about other political issues.

Step 2 is to spread the word. Find your audience, find who will listen to you. Even if it’s only your family and friends, just tell who will listen. Make sure they vote at least, and if possible help them change their personal behavior too. That’s what I am trying to do here, and I hope I can have a bigger impact this way than chatting up my grumpy uncle at Christmas’ dinner with the family.

Finance and offsets

Carbon offsetting is in a nutshell giving money to projects focused on taking carbon out of the atmosphere. That makes up for some of your CO2 emissions. Clearly not everyone has money to spend on this, but I would imagine most people reading this do. Developers overall are rather well paid and we should use this privilege and opportunity to help out where we can. Some of the calculators I mentioned above can help you figure out how much to give to compensate for your emissions.

I decided to give $1000 this year to a variety of projects to maximize the odds that it does some good. It’s way more than I would be “required” to pay to offset my emission this year, but I am happy to start making up for the past years flying around to conferences all over the place.

The way I see it, as long as governments do not take this seriously enough, my tax money is not being spent where I want it to, so doing this is like adding some environmentally-focused tax on my income and making sure it goes directly to climate action.

Resources

  • Awesom.Earth is full of resources revolving around climate change and climate action.
  • ClimateAction.tech is a community of tech people trying to engage themselves in climate action, in case you want to try and apply your skills to help out.
  • World Scientists’ Warning of a Climate Emergency If you still need convincing that it’s time to act.
  • Article about the IPCC 2018 report This also described a landscape in 2040 which sounds pretty bad. 2040 sounds far away, but is also not that far. It’s in 20 years. If you are in your 30s or older you may remember when The Matrix came out in the theater, that was in 1999, which is 20 years ago, yet does not feel all that far away. This is all coming for us faster than we think.
  • The Planet is Burning – a more romanticized version of climate change and its broader context seen as the Pyrocene, or the Fire Age.

Thanks for reading, and much like you should do whenever you edit a file, let’s try to leave this planet in a nicer state than we have found it in.

Finding Growth in Community

No man is an island entire of itself; every man
is a piece of the continent, a part of the main

John Donne wrote those words nearly 400 years ago, yet somehow people still don’t heed them. We like to think we’re self-made and independently grown – I even used to claim to be a “self-taught PHP developer” in my bio. It’s funny how we manage to convince ourselves that we have done it all on our own with little help from others.

The reality, of course, is far from this – all of us (yes, that includes me and you) are a product of the community that we inhabit and an amalgamation of all the people who have influenced us over the years. There is no escaping this, but what are we to do about it? What does this have to do with writing code? Is it enough to just acknowledge the state of affairs and move on?

Perhaps, but maybe there’s a better way.

Finding your People

If the people around us are such a large part of what shapes us, then would it not make sense to surround ourselves with people that can help us grow? The answer should be clear but that doesn’t mean it’s easy to know where to look.

Luckily for us, plenty of active communities already exist within the PHP (and broader tech) world – many of these are online communities, while others include in-person meetups in hundreds of cities around the world. I encourage you to seek out people and groups that can help you grow – a quick internet search for a community focusing on your preferred language or platform will turn up plenty of useful information for you.

Of course – that’s often easier said than done. Finding a group of people that you genuinely connect with can be tough, but believe it or not, you’re not alone – plenty of others feel the same way and if you just take a chance by stepping out of your comfort zone, you’ll find many others in the same position as you.

Growing Together

Once you have found a community to which you feel connected and where you find value, start to dig deeper. Get to know more people – connect with them outside of the context of the community itself and make a few new friends. You’ll be pleasantly surprised by how open people are to making new connections.

You can even contribute to your community to help it grow – I can say from years of personal experience that this is the absolute best way to see long-term and incredibly valuable growth in your knowledge, career and life experience. For most communities of this nature, there are two primary areas of contribution that are great to get involved with: organising and speaking. The amount of work that each of those involves very much depends on the nature of the community, but I can guarantee that if you start contributing in either of those ways, you will certainly not be disappointed.

Some Help for the Journey

This is all very exciting and I hope you take the leap into community soon if you haven’t already done so. In order to help you on your way, here are some online resources that will help you out:

  • The CMX Hub blog – an excellent resource of community materials and content to help you get the most out of your community.
  • The CMX Hub Facebook page – lively social interactions with people involved in community all over the world.
  • The Community Signal podcast – excellent content and interviews with community professionals all over the world to educate and inspire you.

And a few books for each stage of your community journey:

No man is an island entire of itself; every man
is a piece of the continent, a part of the main;
if a clod be washed away by the sea, Europe
is the less, as well as if a promontory were, as
well as any manner of thy friends or of thine
own were; any man’s death diminishes me,
because I am involved in mankind.
And therefore never send to know for whom
the bell tolls; it tolls for thee.

“No Man is an Island” – John Donne

Slices of my life.

Over the years, life taught me an important lesson.

Slice 1: Several years back, I always finished my meals with curd rice and I remember declaring after a fully satisfied meal that I can never live without curd rice. As a South Indian, it was not uncommon to find the curd rice an indispensable part of my life; after all, we had it for lunch and dinner – twice a day – almost daily. But due to a curious turn of events, I turned vegan and I lived without the curd rice for 8 long years. Today, I eat it in moderation. Life showed me that sometimes what I considered indispensable was really dispensable. Cut.

Slice 2: Ever since my first job, one of the important criteria for me while choosing a job was if I had to work on Saturdays. I rejected some good offers which had working Saturdays or working second Saturdays as part of the deal. I dodged and ducked when I saw a job offer with a working Saturday, not without reason. I loved to spend time on my other interests. Not unheard of, right? But due to another curious turn of events, I worked Saturdays for about 5 years, most of those supposedly half-working days turning out to be full-working days. Life showed me that sometimes what I considered unbearable was really bearable. Cut.

Slice 3: I grew up in the cool city of Coimbatore, ridiculing Chennai for its hot tropical weather and other issues that a metro city faced. Later, I moved to the cooler Bangalore for about 9 years. By now, you must be getting the drift. Yes, another curious turn of events later, I moved to Chennai and I have been living for the past 13 years in Chennai. Chennai taught me that every city has its own merits and I have a love-hate relationship with it. Life showed me that sometimes what I considered unimaginable could become real. Cut.

Slice 4: About ten years back, I used to code in Perl. I enjoyed writing those tricky hacks in Perl that got things done super quick. It did appear a little obfuscated at times, but that is Perl. The flexibility was incredible and I had fallen for the language. Around this time, I distinctly remember a discussion with some of my fellow researchers on programming languages, when I commented how difficult it was to read HTML-interspersed PHP code. I recall adding something about how ugly it looked, blissfully unaware then, that I shall be spending several hundred hours in the future with PHP. 

So, it may not surprise my dear readers to know that another curious turn of events later, I voluntarily chose to code in WordPress and hence PHP. I look at HTML-interspersed PHP for a good part of my job. Life showed me that sometimes, I have to embrace things which I may not appreciate.

Today, as I pore over PHP code, there are times when I feel that it is not as ugly as I earlier thought it was. So, I cannot help but think that all along – in giving up something I loved, in taking on something I did not wish to, in seeing the merits of something I did not like, and in embracing something which I did not appreciate – life has been trying to teach me an important lesson, that everything has a place in life and I should reserve judgement.

As we prepare for the festive season, let us embrace all that life offers, whether we appreciate them or not.

From ideas to WordPress

I’m a software developer from Benin Republic.
I have been coding since 2017 with languages like HTML, CSS, PHP(WordPress), JavaScript.
I have worked on different projects and built lots of cool stuff that you can check on my GitHub.

How everything started?

Everything started when I got my first job as a developer at ORION ORIGIN : a team of nice people, who build amazing premium plugins and themes used by people and developers around the world. I was tasked with creating plugins.
At first, this was challenging but I found a way around it. I built WordPress plugins and also provided support for them.

Along the line, things got easier, so I started working on personal projects, one of them is called : HomeScript and I have built lots of cool WordPress plugins under these name that you can download on my WordPress Profile.

Let’s talk about WordPress.

WordPress is a Content Management System (CMS) that is powered by PHP and MySQL. Developing with WordPress means you have to be grounded in PHP, understand OOP concepts in PHP, understand WordPress hooks ( add_action and add_filter concepts ) and how they work. All these knowledge must be acquired by a developer. So I dare say that being a WordPress developer doesn’t make you any less of a developer. 🙂

Why WordPress instead of other CMS?

This choice was based on my job, the choice is based also on the fact that setting up a website with WordPress is easier than setting up with Prestashop or Drupal.
This motivates beginners who want to learn to code and do not want to kill themselves with all the different languages.
Many developers have created lots of plugins, that are helpful when you want to easily create your website.

Also, WordPress has a very large active community of developers that are always there to show support and guide you on anything you might need when developing with WordPress.
This gives everyone an opportunity to be part of an awesome community that accepts everyone.

Challenges i have faced

Some of the challenges I had when I started coding are, first of all, electricity not always being available, and secondly the price of internet here in Africa is very expensive.
This is really a problem because without the internet you can’t get access to courses online.

At ORION ORIGIN, one lesson I learnt during my job is that every code needs to be optimized, I don’t need to repeat some functions into my code. The (DRY: Don’t Repeat Yourself ) concept applies to WordPress too, the ability to respect the coding standards set by WordPress .

Some recommendations

Everybody can create amazing plugins or themes that can be successful like the Conditional Discounts for WooCommerce or WooCommerce Product Designer plugin, they just need to find the right idea that adds value to someone, and the money will follow.

By searching on the internet, many articles exist and can help a lot in the process of creating and releasing a WordPress plugin. For example, articles on Medium have contributed to help me become a better developer today.

Invest in Yourself – Be an Intropreneur!

Each person is elemental. No one else is like you. Your life, times, and biology combine to give you a unique view and experience of every moment you encounter. It is your right – and depending on how you value yourself – your responsibility to develop your distinctiveness and add it to the diverse interactions which shape society. There are two phases to this process (discovery and expansion), and they should be engaged iteratively throughout your life.

Let the Discovery Begin

In the first phase (discovery) you take stock of who you are, what you know, and experiences you’ve had. Preparation is an essential component to introspection. The more you free up your mind to focus your attention, the better the outcome. Reducing the noise of your life a challenge depending on how you live day to day. Preparation might involve meditation, exercise, and clearing time to begin the inventory – admittedly a challenge with work pressure and attention-robbing demands of today’s always-on society. Going into the discovery process intentionally is key; if you admit that you are investing in yourself, this process deserves first-class status among all of the activities you undertake. Set yourself up for success with a distraction-free environment and period, at the time of day when your thinking is at its best (for me this is first thing in the morning, while my wife tends to work best in the later part of the day). If you have a system for organizing your attention and accomplishing your tasks day to day (e.g. Pomodoro Technique, GTD, etc.) this should fit in as another to-do item.

The goal of discovery is an inventory which can be validated and then used later on to develop a plan to improve what you know and experience, or to identify areas of growth. A stream-of-consciousness diary is a good first place to start and uncover what you know, what you think of what you know, and importantly, how you feel about your skills and experiences. If you are giving yourself full permission to turn your attention inward, it can be frightening to really see yourself and access the internal monologue that may have been playing subconsciously in the background (this is where I often come face to face with my impostor syndrome). External tools can help here either for initial discovery or refining what you discover; skills tests, counseling, conversations with friends or peers, even blogging can give further insight and most importantly some validation. (NB: if you are working through mental illness, trauma, or are in treatment already, you might want to only undertake this process with full awareness from your counselor. Remember to use the support systems that you have – that’s why you have them!).

Expand Your Horizons

Once you have your catalog of abilities and experiences the exercise of expansion can begin in earnest. This part of the intropreneurial journey can take many paths. Which path one takes comes down to personal motivation and desired outcome. I like to work backwards from an action-focused outcome. For example, rather than say “I will learn conversational French in six months,” I am more motivated by “I will have a basic conversation in French in six months.” For a PHP developer looking to modernize their skills, rather than say “I will learn TDD by [some date],” they might say, “I will deliver an app in the next six months using TDD.” Language – the language we use for intentions – matters! It is also important to step back from the goal and put into place a system for measuring progress. The SMART framework can be a valuable approach, and depending on one’s level of discipline, it may help (or be outright vital) to be accountable to a friend or colleague, or to use a motivation app (there are literally dozens out there) – this may be more comfortable if you are struggling with impostor syndrome or other forms of crippling self-doubt (there are literally dozens out there).

The wonderful thing about the intropreneurial process is that even if you fail to complete the goal – or to really work on it at all – you are regardless left with valuable insight into who you are, what you can achieve, how you set goals, etc. Lean into that insight at the conclusion of your timeframe and use these insights as you dive back into the discovery phase. Over time this cycle can become a dependable adventure, and a review of your discovery diary entries should reveal new skills and new experiences, which will serve as further motivation to expand your horizons even more.

Each of us brings a unique mix of motivation, experience, and bias to every decision and situation we encounter. We owe it to each other but especially to ourselves to focus some energy on deepening and broadening these things that make us who we are.

What has the PHP community built?

The PHP community is pretty large. It’s easy to become isolated within the bubble of your chosen framework, version, or domain-specific code. Here’s a look at some interesting PHP projects I’ve discovered over the years. Some of these are more well known than others, but all definitely deserve some love. Links to the websites will be in the headers.

Disclaimer: I’m not affiliated with any of these projects, but I do use a few of them.

Grav CMS

Grav is an interesting alternative in the widespread CMS landscape. It’s flat-file based instead of database reliant, which for simple websites makes getting from zero to deployed that much quicker. I even built my personal site with it!

There is no installation process required to get up and running. You can extract a ZIP of the latest version and start slamming out content.

Configuration and accounts are stored in YAML files in the system. Caching permeates Grav’s design, speeding page delivery alongside JS & CSS pipelining to only serve single JS/CSS files. Themes are made using the Twig templating engine and pages themselves are written with Markdown. It’s a highly portable package.

The plugin ecosystem is not as huge as other popular CMSes, but there are still quite a few plugins for all sorts of extra features.

October CMS

October is a Laravel-based CMS, with a focus on simplicity of the user experience while still providing high-octane features for developers. I feel it’s almost an understatement to call October a CMS, as it is a bit more involved than that.

Like Grav, it uses Twig (with a few extensions) for templating instead of Laravel’s Blade. This allows a lot of fine-grain control over what your final page will look like while also being designer-friendly. The interesting bit is that themes and pages are managed through the October backend itself, not needing to dive into code and deploy things constantly (though that is always an option).

Installation/deployment of October is more akin to standard PHP systems, requiring certain PHP extensions and using a database. Like WordPress, it has an installation wizard to make life easier.

Personally, what I find interesting with October is the intersection of providing a clean and understandable UX for non-technical people involved in the process, and the flexibility of a framework like Laravel to customise almost any aspect of the system. On top of that, the developers are quite active in supporting the plugin ecosystem and have quite a few of their own “default” plugins for October for you to get started with.

There’s a lot more that I haven’t mentioned here, so do take a look!

Matomo (formerly Piwik) Analytics

Of course, there’s more to PHP life than CMSes. Matomo is a FOSS (GPLv3), fully-featured alternative to Google Analytics, and is quite proud of that fact. Their main method of income is support contracts and cloud hosting of the Matomo platform. However, you can self-host to get most of the feature set, save for more intricate features like A/B Testing and SAML integration.

Matomo reports on your full data set instead of a subset of it. You also get the benefit of full control and ownership of the generated data, which allows you to do your own extra analytics on top of it and is generally a boon to more privacy conscious developers and users.

Speaking of which, Matomo allows for GDPR compliance through a “GDPR Manager” which has features like anonymisation of data, right to erasure, deleting historical data, and more.

Matomo is a huge system, but well worth the effort of installation if going the self-hosting route, and has various relatively affordable pricing tiers.

Monica Personal CRM

Monica came to my attention some time in the latter half of 2018. It’s essentially a personal rolodex for the web age, built with Laravel. Like Matomo, it’s FOSS and free for self-hosting, but you can also sign up for the cloud-hosted version for simplicity.

Now, if you use Facebook, your first thought about this is likely “why would I actually need this?”, and it’s a valid question. Then I’d ask you to consider how much you actually use Facebook to track information on your friends (aside from just their birthday) and not just for an endless feed of posts and memes.

Monica is not a social network. It is purpose-built for managing your relationships and storing information that you want to remember on your friends and family. You can store anything from relations between contacts, pets, debts owed or tasks related to a person from its interface.

From its own website, Monica claims it “is for people who have jobs, a family, and are busy trying to find a good work/life balance. So busy, that they don’t have time anymore to remember to call a friend, say happy birthday to a nephew, or remember to invite someone special for dinner next week. The older we get, the more life gets in the way. It’s sad, but it’s the reality.”

If you’re keen to try it out but aren’t quite sure, you can sign up for free on the cloud version to try it out.

Nextcloud

Here we have another FOSS alternative product to a Google service, in this case mainly Google Drive and tools like Google Calender. As has become a pattern now, self-hosting Nextcloud is free, but you can pay for support or cloud/managed hosting. There are also client apps for all mobile and desktop platforms.

On top of the standard storage system, you can also get calendar, mail, contacts, and video calling. For more cool stuff, its plugin ecosystem is actually surprisingly well-rounded.

Nextcloud also offers extensive documentation related to its GDPR compliance and guides for administrators, as well as plugins for aid compliance available for your server.

I highly recommend Nextcloud for those who would prefer full control and data privacy for their cloud system, or businesses requiring the same control. Installing Nextcloud is fairly straightforward and there are many guides out there to get started with.

Kimai Time Tracking

Kimai is an open source (MIT) time tracking system. In the last year, Kimai has essentially been rebuilt (in Symfony), and its UI redone in the official v2. If any of you have seen the old v1 UI, you’ll agree that using AdminLTE for the dashboard is a vast improvement over the previous UI. The old UI was quite dated and made me gloss over Kimai originally since I wasn’t even sure if it was still actively supported.

The use of AdminLTE also means that Kimai is mobile-friendly as an added bonus. Unfortunately (or fortunately for some), Kimai only has a self-hosted option available. Kimai’s main income source is extra plugins available on its marketplace. However its default feature set is already quite robust, including a JSON API for app integrations, LDAP support, switching between start/end time and duration-only modes.

Usually features like that aren’t restricted on other time trackers, but you’ll be capped on user accounts on free tiers and usually have to pay per user. Kimai naturally offers free as in beer and free as in freedom in this case.

If you’re looking for a viable, free alternative for something like Harvest or Toggl, Kimai is definitely the way to go.

Attendize

Last, we come to Attendize. Attendize is an open source (AAL) event management and ticket selling platform. Another Laravel-based app, it is a fully-fledged system. The Attribution Assurance License essentially boils down to requiring “Powered By Attendize” to be displayed on all pages, but this and other restrictions (redistribution and using in SaaS products) can be removed by purchasing a license.

Stripe and Paypal are supported out of the box, and other integrations can be added. Omnipay is used as the payment proccessing system. Among Attendize’s many features are affiliate tracking, widget sharing (for inclusion on other websites), a browser based QR scanner for door management, and easy attendee management (including messaging via email).

There’s an online demo of the system available on the website. The UX is fairly smooth and displays the exact information you need. Overall, it’s a healthy balance of no-nonsense yet having the ease-of-use you’d expect of a system like this.


While writing this post, I’ve come to realise you could self-host most tools required to run many businesses these days, from time tracking to analytics to business cloud. It’s truly staggering how much there is out there in PHP land for us to make the most of. I hope you’ve found some interesting new tools to play with from this post. Enjoy!

To build, or not to build

Recently someone posed a question on Twitter to the content creators within the Laravel community. They were curious if we had built the course platforms for our content or used existing services.

While the question was specific, it’s rooted in the age old question: do I build something custom or use something existing?

As with all questions regarding choice the answer is: it depends. That’s not a very helpful answer though. So let me share my experience.

Initially save time

Back to the original question, I built my own course platform. But I did so in an minimum viable product (MVP) fashion. My first course, Getting Git, was very basic. There were no special features. A simple checkout flow and video dashboard. Arguably the bare bones requirement for a course platform.

I used Vimeo to manage all of the private content and embedding. I use a free Bootstrap theme for the course dashboard. The landing page used Stripe Checkout. I used Laravel for rapidly developing the models and authentication to tie everything together.

Value your time

This all worked. But was it necessary? No. What I built was a fraction of the features available from existing services.

I could have used paid content on YouTube or Vimeo. I could have hosted my course on an existing platform like Udemy or directly through Gumroad.

Why didn’t I use one of these services? We are quick to think that we’ll need some tiny little thing existing solutions don’t offer. But often if we take a hard look we never actually needed those features.

So why didn’t I use one of those services? If I dig deep enough, the answer is: because I could. Or said another way, I built my own because I am a developer. For the most part, that’s okay. After all, I like what I do.

What’s not okay is devaluing the effort. As developers, we’re terrible at estimating work. Even more so when the work is our own. After all, who cares? It’s just my time. So if I have time, then it’s okay to spend it building something myself.

As I get older, I find this logic to be flawed. Or at least it’s not sound. I have a finite amount of time. In fact, the reality is I will never have more time. Viewed through this grim perspective, time becomes very precious.

I find this helps counterbalance my developer tendencies to build everything myself and devalue time. Doing so puts me nicely in the middle. That Goldilocks Zone where it’s not too custom, but not too generic. It’s just right.

Build over time

Returning to my course platform, it started out pretty minimal. It wasn’t until I made my next course, BaseCode, that I added more features. Things like invoices and course add-ons. When I created my most recent course, Confident Laravel, I added even more features like marking a video complete and auto-advancing to the next video.

I built my course platform slowly, incremental. It took 3 courses for it to have even the basic features which matched existing platforms. Sure maybe a few users asked for these missing features along the way. But this didn’t deter people from buying my courses. It didn’t limit them from watching it in anyway. Again, that’s the critical V in MVP. It has to be viable.

Maintenance takes time

There’s another aspect to building it yourself to which is the ongoing maintenance. This goes beyond just the initial time investment. Now you’re responsible for not only managing the CodeBase and making sure that the dependencies are updated but also the server is updated certificates configuration and so on.

All of this adds up. So if you’re able to offload this onto an existing service, it’s definitely worth saving some of the pain you’ll have by building it yourself.

Closing

In the end, I think it’s best to be somewhere in the middle. Leverage what you can in the beginning. As you grow, add additional features which are necessary. With more reuse, allow yourself to add an extra feature. This incremental approach will prevent you from the age old trap of building everything initially and recoup some of the time you might have saved by using an existing service.