Anyone who lacks the knowledge of how to build quality software, as well as the wisdom to know when code is good enough to ship, does not have the experiential background to have a valuable opinion on the code quality vs. getting things done debate.
Recently I’ve been talking to companies that want me to improve staff productivity. The opening conversation tends to be about the same: they pitch me on their company and what a “great place to work” it is. They brag about how smart the people are, how much fun everyone has, and how it’s more like a family that a bunch of co-workers. They describe all the perks like massages, video games, beer-on-tap, coffee bars, and how much everyone loves them. “Sounds like you have it all together,” I say after hearing all of this. “Well,” they reply, “I just wish we could get a bit more out of them.”
The following is my response to Ewan Valentine’s blog post “How to never complete anything” that I discovered on Hacker News. Once again, I ask for people’s indulgence for posting a reply on my own blog rather than in the Hacker News comments. I find writing on my own blog a bit easier than wading into the surf that is the sea of many perspectives.
I have recently been involved in the overhaul of an established business with poor output into a functioning early/mid stage startup (long story). We are back on track but, honestly, my lessons learned fly in the face of a lot of currently accepted wisdom:
- Choose languages that developers are familiar with, not the best tool for the job
- Avoid microservices where possible, the operational cost considering devops is just immense
- Advanced reliability / redundancy even in critical systems ironically seems to causes more downtime than it prevents due to the introduction of complexity to dev & devops.
- Continuous integration seems to be a plaster on the problem of complex devops introduced by microservices.
- Agile “methodology” when used as anything but a tool to solve specific, discrete, communications issues is really problematic
I think overall we seem to be over-complicating software development. We look to architecture and process for flexibility when in reality its acting as a crutch for lack of communication and proper analysis of how we should be architecting the actual software.
Is it just me?
I was going to reply to the comment on HackerNews, but I quickly realized that I had a lot to say, and it would not have worked well as a comment. Additionally, I felt that others might benefit from reading this question and my response in the future, and I worry that HackerNews comments quickly vanish into the ether never to be re-discovered by anyone at a later date.
In my previous “An Attempt at a Pragmatic Framework for Defining a ‘Senior Engineer’”, in the “A Process to Estimate Work” section I said:
“It is beyond the scope of this post to describe everything that goes into making a good estimate, but suffice to say a senior engineer views estimates as a difficult challenge to be surmounted, and as a result will normally ask for dedicated time simply to come up with the estimates.”
A commenter asked that I write an article on estimation, and this is my feeble attempt to do so.