Put Your Name Out There

Ever since I decided for PHP programming language as an ultimate weapon of choice for my software development career, I immersed myself into it. I got online, joined forums, participated in discussions. I spend a lot of time on Twitter which for me is by far the most important knowledge resource. In parallel, I attend meetups and conferences in my area.

Working full-time will earn you a salary, but most of 9 to 5 jobs won’t afford you enough opportunities for staying up to date with the latest technology trends and best practices, which is crucial for keeping in step with times in our industry. All it takes is to allocate some time and effort to invest in yourself – read books and articles, work on side projects, contribute to open-source projects, attend conferences. As a bonus, chances for improving your visibility and reputation in the community are opening up.

Below are my experiences in terms of professional development outside of regular work, in an attempt to become accomplished and recognized PHP expert.

Local user groups

It is very likely that there is a PHP user group in the area where you live. If you don’t believe me try finding one. User groups gather enthusiasts, like-minded people who share the same passion for programming. They act through all sort of activities, ranging from moderation of online discussions and publishing educative articles, to organizing major events that attract hundreds of participants.

Those are the characteristics of a user group local to my area – “PHP Srbija”. Upon joining, I was primarily involved with writing articles on a group’s website, but I eventually found myself in the role of a conference co-organizer.

Being a member of a user group who actively takes part in achieving the goals of the group can be a springboard for improving visibility in the community. In my case it is being a co-organizer of the annual “PHP Serbia Conference”. I met and formed relationships with some of the most prominent experts in the PHP community that we hosted as speakers at our events.

Reach out to a nearby user group or start a new one, actively engage in its work, meet fellow developers, make new friends!

Blogging

To a large extent, programming is about exchanging and sharing knowledge. One of the ways to make a more visible contribution to this matter is to run a blog. I got into it recently when I started my own blog with the idea of sharing experiences and thinking arising from my professional career.

The benefits of a decent blog post are mutual – readers learn something new, useful from it, and the writer has it as a timeless note to get back to when needed.

Starting a blog is quite simple, given the number of tools and platforms that are available. WordPress is by far the most popular blogging platform nowadays. Blog hosts such as Medium are becoming increasingly popular. If you prefer to write texts in Markdown like I do, Jekyll is a leader in static website generators category, but I would recommend Spress or Sculpin simply because they were written in our beloved PHP.

The real challenge is the content with which you need to enrich your blog. But don’t worry, no one expects you to write on a weekly or monthly basis. Best blog posts are born spontaneously. So whenever you have something interesting on your mind, solution to the problem you came to or a cool library you’ve just discovered, or if you simply want to make a note of something, write a blog post and share it with others.

Open-source involvement

Open-source paradise has saved us countless hours of work, allowing us to build businesses on top of quality libraries and tools that are available.

Instead of being a greedy consumer and mere observer, I decided to activate myself in this field as well, by contributing to projects that I like and use, like Zend Framework for example, but also publishing my own work.

The principle of making contributions is simple. If you’ve come across a bug when using a library – fork it, fix it, and open a pull request to the library’s repository. Also, if you feel some functionality is missing or can be improved, propose changes. On the other hand, whenever you write some reusable component, release it to the wild and promote it, because someone might find that piece of code useful.

By engaging in the development of open-source projects, you improve your programming skills by striving to write quality and testable code. Maintainers are very passionate about their projects, and can be very demanding when reviewing pull requests. Don’t take this criticism as malicious, but rather look forward to it and be positive. If you think about it, you get a free code review by an expert and valuable advice along the way.

Public speaking

Most people can very well express themselves through writing, but public speaking is a completely different dimension. It’s fairly easy when the audience is made up of few close colleagues, but doing it in front of 50+ strangers at meetups or conferences takes a lot of skill and self-confidence.

I broke the ice at the local user group meetup two years ago. Of course, it didn’t go smoothly the first time, but I got the hang of it after few talks at meetups that followed.

Culmination of my public speeches happened in November this year, when I gave my first ever conference talk at PHP Central Europe Conference. Surprisingly, it went better then I ever imagined it, and you guessed it, I blogged about it. I consider this one of my greatest successes so far, as I believe that being a conference speaker is a major step forward in the career of every developer.

Some people are natural talents for speaking, but like with any other activity, it’s all a matter of practice. Therefore, the best advice I can give you on this subject is that you go to meetups and conferences, and see how other speakers do it. Learn from the best.

Return on Investment

After a few years of engagement in all these different fields, I doubled the number of followers on Twitter, developers use my open-source libraries, and I have a considerable number of visits to my blog, especially after publishing a new post. I successfully carried out my first talks, and I progressed to the conference podium. The very fact that Andreas gave me the opportunity to express my thoughts on this website and recognized me as one of 24 people for this year is a great privilege and honor.

There’s no doubt that my visibility in the PHP community has increased, and I believe that this fact was crucial for accepting my first conference talk proposal. I would point out that the two exceptional individuals who contributed most to my increased visibility are Marco Pivetta, aka “Ocramius” and Chris Hartjes, aka “Grumpy Programmer”. Some of their re-tweets spread my thoughts and work which then had a significant echo in the community.

If you are wondering where is money and profit in all of this, try looking at things from a different angle. There are more and more companies that ask for GitHub profile URLs instead of resumes. Almost every company appreciate developers writing publications either on their own blogs or specialized websites and online magazines. Being directly involved in the organization of big events such as IT conferences is a great thing in itself, but also a big plus in the eyes of employers.

Believe me, the chances for employment are much higher if you’re active after working hours, and at the same time you’re remaining employable. PHP community can help in achieving your personal goals and ambitions in many different ways, so embrace it and get the most out of it.

 

Your first successful open source project

There is something thrilling, rewarding, and even scary about getting your first open source project out there for the world to see. But where do you start? How do you end up with a project that is useful to the community?

As South Africa celebrates the Day of Reconciliation, a day to promote unity throughout the South African community, across all languages, traditions, races, cultures and genders. A day that we focus on being one as a country, despite all our differences, I can’t help but see it as a perfect day to share some of my personal experiences about open source with you.

Getting involved in open source has been one of the most rewarding things I’ve done. Seeing other developers blog, tweet and recommend one of your projects is priceless. Lets dive in to a few tips I believe is required to make any open source project a success!

A Selfish Act

The first open source project that I consider a success was my Laravel Migrations Generator. We started rewriting one of our legacy applications in Laravel at my company. The database had more than 100 tables, and some tables had more than 50 fields. It would’ve taken forever to rewrite everything by hand, and would’ve been very error prone.

I decided to look around to see if there was something already. I found a few options, but none of them could replicate our legacy database with 100% accuracy. After trying them all, I decided to write my own.

I didn’t try to create an open source project, and at the time I didn’t even know I was going to open source it. I was just looking after my own best interest, trying to solve my own problems.

While I was searching for a tool that could generate these migrations, I came across a lot of people asking for one. So once I was happy with the results, I decided to create a Composer package and open source it. This is a scary step, and I must’ve gone through the code 100 times to make sure I didn’t do something stupid. But the important thing is I did it. I pushed the code to Github for all to see.

Choosing a licence

Unlicenced code is unusable code. Without a license you are the only person allowed to do anything with the project, which is probably not what you want.

If you want to allow others to use your code, you’ll have to decide on how you want to allow them to use it. Have a look at choosealicense.com if you’re not sure or head over to opensource.org/licenses for a list of open source licenses. I generally use the MIT or GNU GPL licence for all my projects, but make sure you understand the full implications of the licence before adding it to the project. — Thanks to Andreas for pointing out the importance of this section

Easy easy easy!

To get people to contribute to your project, they need to first use your project. The easier it is to use, the more likely it is that someone will use it, and the more likely they are to contribute later.

If you manage to build something that is a thousand times better than any existing solution, and has the most beautifully written code, but takes a day to understand and set up, chances are people will end up using the less effective solution, mainly because they got it working in under 10 minutes. So the first and most important thing is, make sure it’s easy to find, use, set up and understand.

Easy to find and install

I’d highly recommend that you put your code on GitHub. Bitbucket and GitLab are great tools, but not everyone is familiar with them.

Secondly, make sure you use a package/dependency manager for the tool you’re using. Examples might be Composer, NPM and the WordPress Plugin Directory. Just make sure it’s as natural for the user as possible to install your project.

Easy to set up

Think about when you want to use someone else’s project. You want a short description on what it does, and then some copy/paste installation instructions, and perhaps a more detailed explanation as to what it does below.

Add a README.md that gives a short description of the project, and then lists everything a user needs to do to get it installed and working.

Easy to use

How many times have you installed something, and 10 seconds in it gives an error. Depending on the project, you might just decide to uninstall it and try another one. Similarly, if you read the documentation, and you need to jump through hoops to get it working, you might decide to rather jump to another solution.

If they can easily get past this step, and it seems to be doing more or less what they expect it to, chances are, they’re hooked. They are now going to use it in their current project, and hopefully tell their friends about it!

Marketing

I’m sure many of you have found a hidden treasure before – a great project that simply no one knew about. It doesn’t matter how good your project is, or how great the code is; if no one knows about it, it doesn’t help anyone.

I’ve spoken to other developers about this, and some have said: “I’m not that kinda person, if people want to use it they can, and if they don’t, they don’t”. At first these people seem very humble. They’re not trying to sound cool by telling everyone they just wrote this awesome tool. But sometimes it really is an awesome tool, and people need to hear about it. Simply putting it on Github is not enough.

How you may ask? If it is solving a common problem, it may have already been raised on Stack Overflow, forums, IRC, Twitter, etc. Find those questions and start answering them by promoting your project.

“You want me to shamelessly boast about my project, by spamming it all over the internet?”

Spam is something people don’t want. If your solution works, and helps them solve a problem, then it’s definitely not spam! But yes, I want you to let the world know that you have built a successful project, and that you think it’s worth looking into.

I started Googling for “Generate migrations from existing database”, finding questions, and answering them with a link to my project, adding a disclaimer that I am the author. I did this once or twice, unsure if my project really was any good, in fear of criticism. After I received a positive response from the community I went back and probably answered a dozen similar questions, getting my project out there.

Two months later, I saw someone else recommend my migrations generator as a solution on IRC in #laravel. I later found a blog post written on installing and using it, with step by step instructions and screenshots. After a while people started raising issues, and submitting PR’s. This was a great time for me!

The code must be perfect

I think people generally put way too much emphasis on “good code”. I think a working solution is much better than no solution, and bad code is much better than one that’s difficult to use.

Sure, the easier it is to read and understand your code, the higher the likelihood that someone will contribute, however, as you can see, this is by far the least important step. There’s a much bigger chance that someone will contribute if it’s easy to use, than if the code is good, because no one contributes to projects they don’t use.

Working with issues and PR’s

Think back to when you created issues on other projects, or have been brave enough to submit a Pull Request. For you, it’s a big moment. Will the maintainer respond? Will they accept your PR. You end up refreshing the page every 5 minutes just to see if something changed. And it’s very important to keep this in mind when going through issues and PR’s.

If someone has created a PR, it means they have put effort into it. It could very well be their first PR ever. Think how you would want someone to respond to make you want to contribute again. You want someone to recognise your work, your effort, and you probably want to see it 10 minutes after you opened the PR.

Be kind. Always thank people for creating issues and submitting pull requests. They took time out of their day to help improve your project!

Always try to accept a pull request. If the code is not up to the minimum standard you’ll accept, help them to improve it. Mentor them, and lift them up. Do everything you can to get those commits merged in. It’s a great feeling for a developer to get their code merged into a public open source repo and, chances are, they will do it again.

If it’s implementing a feature you really can’t accept, explain it to them. Tell them you’re sorry for not accepting it, but you don’t see it as part of the project. Also, recommend opening a ticket suggesting the idea, before spending hours of work on it, and urge them to submit again. Perhaps propose an easy task they can help you with.

Conclusion

Open source, in some way, is a lot like running a business. For it to be successful, you need a product that the community would be interested in. You need to market the product, work with people, and make tough decisions about accepting or declining pull requests, all while trying to keep everyone happy. The main difference being that you’re doing it for the community, with the community, and everyone is hoping you succeed!

I hope this post inspires you to release one of your projects as open source, and please, do tell us about it 🙂

Community Driven Development

When talking about development I mostly mean personal and educational development. So this post is not about a new fancy way of writing software.

Why Community

I personally felt the power of a community on my way to the position I’m currently at. I started working with zero practical experience at small company in Germany. It was a good way to get into the business, but very soon I realized, that there is an other world out there. So I started experimenting with Symfony. At the same time I heard a conference talk by Lukas about the Symfony CMF. As content management was my daily business, I tried to dig into that Content Management Framework. I admit, I couldn’t understand how it worked. My first attempts on implementing it had been a disaster. But then I started committing to that ecosystem. It had not been my first contribution, but it was the first that ever got merged into something bigger. But that is not the point. While working on my own CMF component and committing to the main packages, I had an impressive learning experience.

When Working on such an project I learned a lot of the internal processes of Symfony. I really had helpful but demanding guys on every review. And indeed I would like to thank David and Wouter. With their help I made my biggest step in my personal development. Instead of declining a pull request, I got a lot of helping words. Those words contained more and better advice than a documentation can ever give.

So I became a core developer of the CMF. Currently I prepare a new major release with the same guys. We are planning to serve before Christmas. And again I learn. I currently don’t work on a Symfony application in my job. But with the work for the community I stay in touch.

Not your Story?

I believe, that not every open source project can bring on the same success, but most of the community driven projects do. Almost every bigger project has got chats, user groups or meetups and sometimes their own conferences. That can be an easy starting point. When using those projects in daily business, you should visit the community one way or the other. You will gain insights you will never get by simply reading documentation. Those visits combined with public speaking is the first contribution to such a project. There is no code or documentation involved yet, but it gives every internal contributor some self confidence. Realizing that one or more people use the code you wrote or contributed to is a really good feeling. Trust me. I stand in front of more than 500 Symfony developers and asked who knows or got in touch with the CMF. And almost the complete crowd raised their hand. I can’t really describe what that did to me. I is absolutely amazing.

Why not starting to commit?

Most often it starts with a bug or missing feature when using an open source project. Instead of ranting you should fork, fix and push. Maybe you realize why that bug had happened or the feature hasn’t been implemented yet. It is easy to yell for a specific behavior of an application or library, but the implementation of it can be more difficult than expected. Libraries used by lots of developers need a special kind of extensibility. Contributing to those libraries is the best way to understanding those concepts. And doing so, it also helps to get aware of the work, that is needed to get a feature on the road.. That said I have to add, that the code isn’t the only possible contribution.

The Documentation often needs some effort. So how often did you say “This isn’t documented well”? Fork, fix and push! Same answer here.

It is open source. It is implemented by a community of moms, dads and other people, who sacrifice their free time. There is no service hotline you can call and shout “I paid a lot of money for that, so it has to work the way I want.”. In my opinion there has to be a kind of compensation. The more you take, the more you should give.

Commit while your job

Yes! You should discuss in you company about a way of contributing to open source projects. It is not only about reinvesting. It is mostly about bringing company’s developers forward. As I described some lines above, I learned so much contributing to open source projects. Employees can too. Instead of spending a lot of money on workshops, get in touch with the community, contribute and learn. It is much cheaper. And what can be better marketing for a company selling experts in Project X, than having contributors to the same project on your team?

Conclusion

There are several ways of learning programming language specific skills, but contributing to and working on open source projects, you will also meet kind people and get a lot more information than just reading documentation.