Lately I've been doing a lot of self reflection on the kind of developer that I am and the kind of developer I want to be.
In spite of the constant barrage of Twitter posts claiming that a full-stack developer is not a thing there are a ton of job listings for full-stack developers/engineers/programmers etc. Call it what you want. It means you write code for the browser and whatever back-end language or languages your company uses. TBH I really just prefer the term Web Developer but whatever.
My experience at almost every job I've had is that even "front-ends" end up doing some "back-end" work. The first developer job I had after being a freelancer for over 5 years had the title "front-end developer'. The company was a digital marketing agency that was very design focused. They cared a lot about "pixel-perfect" responsive websites and wrote a ton of CSS. However I think I ended up writing more PHP than CSS.
I was one of the only developers on the team who had experience building custom WordPress themes. Whenever a client wanted a WordPress site I was assigned the task. Yes we could have used an off the shelf WordPress theme but we found that it was much faster and easier to build from scratch.
In addition to the many WordPress sites I churned out I also built a product catalog using Laravel. Lots and lots of PHP.
I wasn't really even told that I had to write PHP. Honestly I proposed these solutions as problems arose.
The Laravel site was built to solve a problem where a client site was extremely slow because all of their products were listed on a single page. Each product had a slideshow of high resolution images. And no the client was not willing to give up the large images.
This had been a problem for a long time and no front-end solutions solved the problem. This was before React was really a thing. Using Laravel we were able to implement all the CRUD operations the client needed. And we were able to paginate and filter all of the products. The page that literally used to take minutes to load was now blazing fast.
Now I could have kept my mouth shut and I would have saved myself a lot of work. Maybe the problem could have been solved another way? But so far no proposed solutions worked. As a freelancer I was used to working on projects throughout their entire life cycle. I generally handled design, development and ongoing site maintenance. I also advised clients on which technologies to use based on their needs. I pretty much just did whatever needed doing. I wasn't really even aware of all of the different titles that existed at companies. I just thought of myself as a web developer who sometimes did design.
I was used to just jumping in and solving problems. I continued to have this mindset even after I was no longer a freelancer. My coworkers appreciated that I was willing to do the research instead of just implementing whatever solution was most comfortable.
To me a full-stack developer is someone who can look at the big picture and solve problems that can't be solved easily with a pure front or back-end solution. A full-stack developer knows how all of the pieces fit together and this gives them the ability to solve problems in many different ways. This person also knows how to research and look for new solutions.
All developers have a different set of experiences that job titles just can't cover. Making assumptions about skill sets purely based on job title is usually not helpful.
I have a lot of experience building sites using WordPress. WordPress is consistently undervalued. Often WordPress developers are not considered "real" developers. The assumption seems to be that all building a site using WordPress is like this. Click a button to install WordPress, buy a theme, change the colors, drop in some plugins, add content, done! In my experience it never goes that way. Clients don't want to pay much for simple theme installs and they don't want a site that looks just like their competitor's.
Usually the client wants a bespoke website with all the functionality they can dream up and they want to be able to add/update/remove content without having to pay a developer. Executing this task well can be a challenge. For complex layouts you must make sure that whoever is adding content doesn't accidentally break the layout. You must account for differing content lengths, image sizes, video, slideshows. And all of this should ideally be accomplished without requiring any knowledge of HTML on the part of the client. Most of the time existing plugins just don't cut it. There is also no guarantee that plugins will be maintained in the future. Often writing custom code is the safest route.
I consider all of this experience very important. It taught me a lot about PHP, CSS, JS. But going through this process so many times also taught me a lot about focusing on the client's needs over my own. Sure I could have build a Backbone or Angular (these were the hot frameworks at the time) but the client would not have been able to have control over their content. I would have more JavaScript experience today if I had 6 years of Angular/React but this would not have been good for the people who paid a lot of money for sites I built.
Whatever you want to call yourself developers/engineers/programmers solve problems. It doesn't matter what language or hot new technologies you use. Your job is to solve problems for your stakeholders. This is where you can bring value.