Customer needs a CMS.
Clyde looks at the requirements for the CMS. He sets off to write hundreds of thousands of lines of code by himself, complete with CI, continuous deployment, tests and documentation because he is a very good developer. Through the course of the project he leverages his years of experience and background in CS and engineering to make a well-factored body of software that will be maintainable for years. He did this in only a couple months.
Bob looks at the requirements for the CMS. He thinks "I know, I will use a good application framework and an ORM". Bob writes a couple thousand lines of code with all the tests and stuff that Clyde had. Bob's tests and app code, however, are more focused on the customer's needs, making in maintainable for anyone who can read the documentation of the software he's chosen to use. It takes him a couple weeks.
Alice looks at the requirements for the CMS. She realizes the customer will do just fine with Wordpress with a couple of tweaks. She sets up a hosted blog so nobody has to actually maintain it. She has better shit to do with her time.
Alice did the least work but that doesn't make her less productive. You're solving problems. If you do work to solve those problems, fine, but having more "output" doesn't make you go from a 1x to a 30x engineer.
Bob went farther than Lewis Hamilton, in a much cheaper car, with no pit crew. Hail to Bob, the 100X Driver!
Your scenario is much the same as the above scenario. Different businesses can extract different amounts of value from programmers. Just like you can't tell a high performance car from a low performance car in a school zone, so some businesses are not tackling hard enough problems to differentiate between programmers. In regards to delivering a CMS, there is not much John Carmack or Jeff Dean could do to distinguish themselves in terms of value to the business than someone who just graduated from Wordpress bootcamp.
In the above scenario, if you are just a run of the mill business, that just needs a CMS to post PR pieces, then Alice is the right choice for you. There is also no point in even discussing 10X programmers because a 2X programmer would be a complete waste of money. If on the other hand, your company is looking to "disrupt" CMS, you want Clyde.
The fact that, in most situations, one doesn't need professional driving abilities is also not of consequence.
I think people who are critical of the idea of a 10x engineer are missing the point. Of course hiring a 10x engineer is not sufficient to Solve The Customer's Problem. 10x engineers are not fairy dust. However, hiring a 10x is necessary if your customer genuinely needs a bespoke solution, or if you are trying to disrupt an existing tech market.
I would also add that one of the main contributions of a 10x is that they raise the productivity of everyone else (creating tools, providing guidance, simplifying code, etc.). I am not a 10x, but I've worked on teams that have them and teams that do not, and it makes a big difference.
Looking to create a completely packaged toolset, from a custom linux distro, that orchestrates containers and does config management (CoreOS)? You might need a 10x engineer.
I know that's what you're saying already, I'm just summarizing.
Alice may have a fine future in consulting, but if her projects never demonstrate hard-to-find technical skills no one's going to pay hard-to-find-technical-skill money for her efforts later.
If you select for people who are good at, and like, writing new programs, then every solution becomes a new program. That isn't the best way to run a business.
Yeah, so this is just another case of the principal-agent problem. The thing which is best for you as a programmer may not always be the thing which is best for the company paying you. You'll have to find a balance between the two, and so will your employers.
I wouldn't be surprised if, in response to this trend, we see the formalization of a new "product developer" role at startups that is kind of a hybrid engineer / product manager. This person can code perfectly well, but is also scrappy and really good at getting shit done. The Alice character in the story above would fit this role perfectly. These people can drive way too much business value for their role not to become a defined hiring target eventually.
for Clyde, definitely not. Clyde really loves coding as an end unto itself. his career advancement is probably getting picked up as a "unicorn" at a quant trading hedge fund, or joining a project that is coding low-level technology infrastructure at a big tech company like Goog/Msft/FB/Oracle/whatever.
For the 99% business he's an expensive liability. Sure he might get jobs, but he'll hardly have a career backed by success.
Agreed. In this specific case Alice was in the right, but there are only so many problems that can be solved by installing Wordpress.
Bob will have "built custom cms on Rails/Django/CakePHP" I'll ask why him the same questions as I asked Clyde along with why he didn't use Drupal or Wordpress or ...
Alice's portfolio will have more in it that just "set up WP site". In fact it probably won't have that in it at all but it might come up during the interview: "Oh, the marketing site? Yeah, I just fired up a wordpress instance, themed it, got backups working and passed it over to IT and got back to my day job."
I guess what I'm saying is that if your resume consists of setting up Wordpress sites, then you better like setting up wordpress sites because that's where your experience is.
Clyde: Spent 6 months writing a custom CMS in Perl in support of Project X.
Bob: Spent 2 months writing a custom CMS in Rails to support Project X. 4 months writing feature A and B for Cool Project X while continuing to support the CMS.
Alice: Spent 6 months writing feature A, B, C and D for Project X.
If I was looking for a developer for Project Y, who looks better?
And you gave zero requirements for what you need in Project Y
So I have no idea and no way of knowing who looks better. Maybe Project Y just needs a CMS to go with it. Maybe Project Y needs an extremely custom web application with niche needs.
I guess the point is use pre-packaged tools when possible. But somebody has to write new software, so you better get some experience in doing that if you want to be a software developer.
Alice was part of a small team in a Space Tourism start-up. Once their marketing site was online she got back to the rocket science.
There are certainly companies looking for the latter.
The key differentiation is: is the company a technology company (Clyde's approach is more valuable) or not (Alice's approach is more valuable).
Alice will have plenty of other things to put on her portfolio instead and should show the 10x other things she fixed with all the time freed up.
In my experience people like Alice have resumes full of novel things, rather than a bunch of B2B-sounding internal apps.
Why do you think Clyde wrote a custom cms in the first place? You think he didn't know about Wordpress? In reality he knew but pushed for the custom implementation because it was the best route to improve his skills and increase his power within the company.
The truth is at a typical company Alice isn't going to be rewarded either financially or with better projects.
I wish it was different but if they both worked at the same company Clyde would be the one taking first pick of all the best projects.
People, who read that, know what they are getting same as they do the prolific developer with a nice portfolio.
Both are high value. It's all in the presentation for Alice.
When Alice is applied to a harder problem (that can't be solved with Wordpress), she'll be able to solve it far faster and more effectively than Clyde because she won't have the not-invented-here hubris and will stand appropriately on the shoulders of giants to construct something that will likely be far more maintainable, broken down into saner components, and on the whole, more effective.
Clyde will be valued as a 10x engineer at his company forever, but would probably find it very difficult to start somewhere else where he doesn't have the luxury of having written the entire codebase.
And quite frankly, a portfolio with yet another CMS hand made is not impressive at all. I'd ask the same thing: "Why didn't you use Wordpress, or another off the shelf solution?"
She used WordPress... now she has x problems?
My own experience of using WordPress is that it's like sticking a "kick me" sign on your back for every script-wielding hacker on the internet...
I can't do that. My customers come to me expecting a solution that isn't hacky and just "there". They expect a solution that solves their issues and not tacks on more issues.
I've never seen any good results come from someone doing the least amount of work possible by finding out of the box solutions that half ass most of the features the client wants.
But I have seen many customers come back repeatedly satisfied with their completely custom solution because it has what they want and not confusing or anything, because it's to their specifications.
If doing half-assed work to get the client out the door and a new one in is the best thing, than I'd rather not be "the best".
IME that is fairly common among developers, who after all got into this line of work because they like writing code, not configuring a web interface. So, many developers will tend toward solutions that involve them writing lots of their own code, especially if it involves using an interesting new technology or framework. "Yes, node + Angular would be the perfect stack for your small business brochure site."
But let's think about the probabilities here, keeping in mind the customer wants a CMS (as specified in the parent comment). Wordpress is used by about a quarter of websites. What are the chances that your client wants a CMS feature that no one else has ever thought of before?
It's pretty unlikely. With very rare exceptions, there is a plugin available for what your client wants. You might need to modify the template to get exactly the look you want, but the feature is available. And Wordpress is not the only popular open-source CMS either--there are plenty of options to meet your client's needs.
From your business perspective, using a popular open-source CMS increases your margins: you spend less time building for the same quality. From a security perspective, a popular open-source CMS is superior to your code because so many other people are trying to attack and defend it. From the client's perspective, a popular open-source CMS is more future-proof--they can fire you and easily find another vendor to take over management. Even better if it's a commercially hosted instance and they don't have to worry about hosting at all.
You usually end up struggling with sub par plug-ins and unintuitive UI's that are a nightmare for you and the customer potentially wasting more time doing that then doing a custom build.
The point is it takes a 10X programmer to recognize when a out of the box popular solution might not be the right choice for the customer.
I used to work in the hosting industry - the overwhelming majority of abuse reports against customers were from people who had installed wordpress and plugins and one of the plugins had a major security flaw, and then the customer was off to the races as part of a botnet or spamming.
So you now have to audit the plugins, you have to worry about future updates to those plugins introducing vulnerabilities, you have to worry about a plugin no longer being maintained and becoming obsolete, etc.
Is there a business case for WP and plugins? Certainly. But the blanket idea that you can just drop a PHP application on a server, install a bunch of plugins, and move on to your next more interesting project is extremely naive.
If you're writing a reasonably complex CMS, you will create security flaws you can fly a 747 through. This is doubly true if the CMS isn't the end goal and rather a necessary dependency for what's actually needed.
The only guard against security holes is battle-testing your code - Wordpress may not be the most secure thing in the world, but it's likely more secure than something you can whip up yourself in a jiffy.
Ditto maintenance and obsolescence - in fact this problem is probably worse for a homebrew solution than WP, since the number of people qualified to maintain this homebrew codebase is approximately one, whereas you can actually hire for WP plugin maintainers if you need to. Likewise, homebrewing your own solution and then moving onto the next project literally means it's not being maintained from day one, which is strictly worse than even a casually maintained plugin.
WP installs aren't always the right solution, nor is deploying some off the shelf code, but choosing to write your own code needs to pass a higher standard than is normally applied in most companies - it's silly to complain that some open source thing might stop being maintained when by default what you write yourself is also not actively maintained ;)
I certainly agree to a large extent, but there's a lot that mitigates this as well:
When it's code you write, you have control over feature creep, documentation, comments, etc.
If you write something that only does what you need, you reduce a lot of the attack surface vs. off the shelf plugins, and you are in a position to make sure that the code commented and well documented. You don't have that sort of quality control over a third party plugin, and you may down the line be in for a rude awakening when it's no longer developer and has a breaking problem, and you open it up and find the code is a completely undocumented mess from top to bottom.
Of course if you're rushing something out the door, you might not produce anything better - but if you're a software shop with solid engineers, you have a high chance of being able to get better quality code out there than a lot of WP plugins.
(That being said, WP today is a lot more secure itself than it was in the past - the right option might be not writing the CMS from scratch, but writing any plugins you need from scratch)
I mean for crying out loud, just installing Wordpress invites people trying to get in using automated tools. You can deploy a wordpress blog at it's default state, and wake up 3 days later to it being spammed.
Instead they use automated attacks to test any website directly for the most common errors. Understand that this is not limited to Wordpress. The types of vulnerabilities they test for are universal: password brute force, directory permissions, code injection, XSS, etc.
Sometimes one of these tests works, a site gets hacked, and then the developer has to a) recognize the site has been hacked, b) diagnose the problem, c) patch the hole, and d) recover the site.
For open-source projects like WordPress, the developer can then contribute the patch back to the community, and everyone else can pre-emptively fix their sites, even if they haven't been hacked yet. Bad guys also get these patches, and add automated attacks based on them. These are often what you see in WP logs, but such attacks are easily defeated by simply applying patches when they come out.
For custom-developed sites, you the developer must do all those steps by yourself, and yes that means you probably won't know about vulnerabilities until they are exploited.
I believe this is honestly true for most software. The longer something has been around the more hacks it will inevitably have in it. The projects I have seen that last the longest are the ones built with a solid, generic foundation capable of handling all types of requests with minimal user touch.
I am not necessarily saying all out of the box solutions do this well but certainly, most if not all off the shelf parts have been iterated more to hammer out bugs, security issues, get the feel right, etc. than your homegrown bit ever could.
I of course couldn't advocate that wordpress is the solution to everything but if it meets the customer's needs right now and will do so for the foreseeable future, I see no reason not to use a mature, existing framework.
If I as a client came to a company and said I wanted a CRM built for my company, and they gave me a Wordpress blog with a shitty CRM plugin, I'd request a refund and find someone who is actually going to build to my needs, and not hurry me through the tunnel to get my money and go onto someone else.
But I believe in quality over quantity. I'd rather spend time building a custom solution (Note, just because I am building a CRM doesn't mean I build the whole thing from the ground up, I use frameworks) that is going to make my client ecstatic and return again and again, than be like a friend's company. No good reviews. My current boss told me he had them make him a website few years ago. He said that lets just say he wouldn't be going back to them anytime soon. Why? Because they build EVERYTHING on WordPress.
Sure, but that sounds like a strawman. The lesson in the original post isn't about building EVERYTHING on WordPress. It's about knowing when to use existing tools and solutions instead of reinventing the wheel.
>>I'd rather spend time building a custom solution... that is going to make my client ecstatic and return again and again
It completely depends on the project. If it is for a mission-critical application that needs a lot of custom, well-designed features, building it yourself might make sense. Otherwise using something someone else has built is just as likely to make your client ecstatic because you just saved them a lot of money and time.
No, I tell them to pay for Salesforce, because I'm not going to build something as good as Salesforce in anything approaching a normal project's budget, and I introduce them to trusted Salesforce consultants I know. It's more important to me that they get the right thing rather than pay me to do the wrong thing. And if you are building a CRM, even with a "framework", for any sort of business under, say, ten thousand employees, it's very likely--not without exception, but I'm betting hard in this direction and I will very rarely lose--that you are not doing the right thing for your client.
The parent comment at the head of this subthread specified that the client wants a CMS. That's how we got on the topic of Wordpress to begin with.
I agree that Wordpress would be a terrible platform for building a CRM. But I am dubious that anyone needs a custom CRM. There are literally dozens of commercially available CRMs at all price points and industries.
My customers pay me for the features I am building all into this service... Not to charge them to hook a membership for another company up to it.
Then I have to provide support for Salesforce. Their service goes down, now I have my customers mad at me because part of my service is down.
Giving the customer direct ownership of their CRM database is a feature, not a bug. They will benefit from a CRM development team who has dedicated experience and expertise in CRM, plus they'll benefit from the feature and security requests of the other CRM customers. And it will make them less dependent on you, specifically. Which, from the client's perspective, is a good thing.
Edit to add: what's more likely, that Salesforce goes down, or that you are unavailable for some reason?
No, you modify the template so it's not showing the stuff they don't want. Problem solved.
"If I as a client came to a company and said I wanted a CRM built for my company, and they gave me a Wordpress blog with a shitty CRM plugin, I'd request a refund and find someone who is actually going to build to my needs, and not hurry me through the tunnel to get my money and go onto someone else."
And if I was your boss, I'd fire you for wasting my money.
"But I believe in quality over quantity."
Nobody here is any different. The difference is that I don't think that the only one who can deliver quality is me.
"I'd rather spend time building a custom solution (Note, just because I am building a CRM doesn't mean I build the whole thing from the ground up, I use frameworks) that is going to make my client ecstatic and return again and again, than be like a friend's company."
And again, you're assuming that result isn't possible with an off the shelf solution.
Now figure out the integration between it and the WP site.
It also saves you lots of time that could be used on the features they actually do want.
Most clients just want a soluton that works
I suppose it does allow you to lock them in easier with a custom solution.
To add to this: Very old custom software located on internal systems is one thing, imagine if you are relying on 15 year old web-based software from a vendor that no longer exists. How do you protect that?
Somebody has to maintain a Wordpress blog, keeping it updated and the plugin list pruned to reasonability. That somebody may be the end user, but a non-technical user maintaining a piece of business-critical software carries its own set of problems.
Someone years ago at my company solved this problem by integrating Wordpress into their own home-baked e-commerce platform. The platform wasn't maintained, Wordpress wasn't maintained, when I came in years later, I found a mess that wasn't even worth maintaining anymore. Eventually it broke. I refused to fix it and so we moved to hosted Wordpress just like Alice.
My solution would have been to find a Rails-based self-hosted blogging platform that I could integrate into my daily workflow. I told them I wouldn't be able to help them if Wordpress breaks and that Wordpress gets hacked all the time. I could have gotten it up in a single day, no big deal. No dice.
Company politics and strategy determine how productive a programmer is. Make him/her do stupid shit and they won't get much done. They say they don't want silos, but then all their technology decisions do is create silos.
"Hosted blog" here means someone else is maintaining it -- Wordpress.com or some other provider. You pay a little bit of extra cash, and you don't have to spend hours deploying patches.
Remember Slack? They needed to chat. Alice said "let's use mIRC". Clyde implemented an IRC clone. Now Slack is a billion-dollar business...
The business might not be out to build their slack, chat could just be enough of a transformer alone. Besides, Slack is IRC client re-skinned with a bit different rendering. It's not the first either but maybe a business case is good enough to just chat as a big improvement.
Many organizations do just fine using something like Microsoft Lync, as much as I like Slack it's not for all users or instances.
Clyde likely has fewer but very good job prospects, but better job stability and higher pay.
Alice probably learns little day-to-day if she makes a living setting up Wordpress, and likely has lower job satisfaction than, say, Bob.
I'd rather be Clyde, but then I like spending my time coding, thinking and analysing, and tend to be fairly unproductive.
It's like the old joke, "I'm not billing you $500 for tightening a screw; I'm billing you $500 for the expertise needed to recognize that that was your problem."
(In my work, there have been times when I spent a week working on a problem and ended up with pull request changing only five lines, but it took a lot of research to find out exactly how to change those five lines.)
I mean, seriously, I've seen too much devs out there, hacking Typo3, Wordpress or Drupal into oblivion to do their bidding.
There are hundreds of companies just doing this.
Well, I saw both. Wordpress and Typo3 filled with dozens of custom modules and "from scratch apps" with half baked solutions.
Maybe it just feels to me that the customized CMS-consultancies are in the majority, because they do their stuff for marketing-customers, so they have more skill in getting the word out.
This was mostly caused by unreasonable expectations and a tremendous pressure on the poor guy, but I still like to think that trying to turn Drupal into an eldritch abomination had something to do with it...
Wally is the 100x engineer.
When the next round of layoffs come Alice is the least needed, so unless she is good at making sure everyone knows she gets the best solutions, she's likely to get canned.
Then when they apply at the new job at the local starup Alice is surely going to fail the first round programming quiz.
If this is a pattern that recurs over weeks, months, and years, the delta in results between Alice and even Bob, let alone Clyde, only opens wider. Alice will surely have other opportunities to do "real programming". Granted, the way Alice is doing it may not be immediately impressive on its own but if it has someone else to compare against it becomes more evident.
I can say I've seen the Clyde solution before, but cpdean's story is rather optimistic. In the real world, the Clyde solution actually delivers late, is usually badly bodged together under the hood due to the too-late recognition of the impending deadline, and will actually create an ongoing maintenance nightmare as his code will be buggy and yet not perform very well no matter how much he bangs on it. In the real world, this sometimes gets combined with a bad manager who sees Clyde engaging in heroics and thinks Clyde is dedicated and stuff, but this is far from a sure thing. That's a very specific kind of bad manager and Clyde would be well advised not to count on having that exact kind of manager. (Heck, I've been Clyde. Very educational. Terrible use of resources.)
Agreed. So looking back are you happy you took Clyde's path? If you had to advise a new grad today, what would you recommend?
Ha! First you have to find a company where the reward for finishing early isn't more work.
Noone wants to be the drone who installs wordpress plugins.
You seems to be suggesting that the only way to solve a problem is to write code, and that's precisely the point that that article is trying to address; That you don't always need to write code to get something done.
It's the same reason why when you need to build a website you don't build a web server from scratch (unless you do in which case, godspeed).
Usually there are a lot more gotchas that need to be addressed. Maybe WP is a valid solution, with some customization, or maybe it's not, based on a bunch of other factors the client presents (existing integration needs, skills/experience of other staff, etc).
Understanding/parsing/coaxing requirements, and setting and managing expectations... both of those are much larger factors in someone's success than lines of code, of speed of coding.
When the client reasonably comes back and says "oh, and we need XYZ to happen and tied in with the CMS". Well... you're now on a 'hosted wordpress' platform and don't have control of anything, so the tie-ins the client needs are basically impossible (or... require 10x the amount of work compared to Bob's solution). These scenarios happen. We can't always predict them, but with enough experience you should be able to predict many/most of the potential use cases (at least out a few years in the future).
No, you're not only solving problems.
Especially with a complex stack of software, you also try to stay in control. This could mean, a library or a third party software adds a clean, encapsulated and controllable part to your software.
This can also mean, you add a library, it works, first, but then you discover bugs and missing functionality. What then? Raise tickets on the third party software and wait and swear? Write code around the bugs, until they are solved (a 100% loss of developer time). Add required functionality to the library, which makes you depend on the installed VERSION and each update requires more time invested.
It is a decision, how important the job is. Developing key functionality in house, not to re-invent the wheel, but to stay in complete control, can be a time saving option, even if it takes weeks of initial investment that could be saved with a third party solution.
The discussion, who is more productive, becomes then really a side problem.
This is why I always groan when I see a "solution" that involves bolting together dozens of different libraries (all out of date because updating any one would break the rest of the system) I know I'm in for a long day.
Using libraries is certainly a good thing and saves lots of time and effort in the long run, but they take more thought than most people are willing to put in. There are no shortcuts if you want to keep your company out of the newspaper as the next big data leak.
Wordpress is an excellent example. Even if you have the basic system down and have the management handled (either in house or externally), there's a dizzying array of interactions with the plugins that can shoot your foot right off. And don't think the Wordpress developers thought of all of the edge cases for you, they have their hands full on the main platform:
At the very least you need to know enough about any solution to deploy to turn off all of the features you didn't configure/don't understand/don't need. So many vulnerabilities these days happen in features you didn't even know you had.
I know the popular saying is to never write code that you don't have to, but IMHO it's less of an evil to write your own couple of hundred lines of glue than to pull in a 100MB package that depends on a dozen other packages just to get that one mandatory piece of functionality.
Most code rot comes not from the code itself going out of date, but from its interactions with external dependencies. Managing the number of dependencies makes maintenance easier in the long run. There's nothing worse than a mandatory security update for a module that breaks another external module that is no longer maintained upstream.
It's the difference between having to figure out a few thousand lines of code written by a small team vs. having to parse through a million lines of code written by several different teams, some of which you don't even have because they only distribute the binary module and of course you don't have a support contract (if they are even still around). If they had a support contract they wouldn't be calling you.
The one big thing you lose however is StackOverflow. Usually bugs in frameworks have bitten people before and they'll have posted solutions online. This can be a big help, unless your client has a particularly unusual set of modules installed that are exposing some new and exciting bug.
I see there's already some WP criticisms, right or wrong, in replies to this. I just want to point out that Drupal would take care of this use-case just as quickly and you get a wonderful ecosystem of battle-tested modules and, ignoring a couple security fuckups, really nice secure code compared to WP, or most popular FOSS projects for that matter.
This problem shouldn't be WP or custom code. I find there's almost always some FOSS project that stops me from writing new projects. This wheel has been reinvented so often, that there's often a pro-level project perfect for a lot of business use cases.
Not to attacked new CMS projects, but if you're going to create a new project your first question should be "What can I do here that Drupal isn't doing already? Or that Drupal can't do with just a custom module?"
The 10x meme is a software thing. From my experience as an engineer outside of software it is rare to be working on something by yourself mostly you are part of a team and you get the best results by leveraging the strengths of each engineer in the team.
To use the example in this thread Dan is the engineering manager, he assigns the latest project to Clyde. Clyde knows he is going to require some modelling work and that Alice is the CFD expert so he asks her to model some cases for him. He recalls that Bob worked on a similar problem for a different client a few years ago so he wanders over to Bob's desk to chat with him about what worked and what didn't. During the conversation Bob mentions he read a recent paper that might be relevant...
Clyde doesn't need to be 10x as efficient as Alice or Bob because he knows they can get more done by cooperating then by competing. That is efficiency in action.