@zamith There is a lot to be said, but one thing I am enjoying a lot is tailoring to my specific case, over 40, back pain, shoulder issues. With the right literature feed in, it produces recovery routines I can add to workouts. It may be AI placebo but it’s working pretty well so far!
At 37signals, three is a magic number.
Nearly all new product work is done by teams of three people. A team of three is usually composed of two programmers and one designer. And if it’s not three, it’s two or one — not four or five. We don’t throw more people at problems, we chisel problems down until they can be tackled by three people, at most.
We rarely have meetings, but when we do, you’ll hardly ever find more than three people on a call. Any conversation with more than three people is typically a conversation with too many people.
What if there are five departments involved in a project or a decision? There aren’t. Too many dependencies. We don’t work on projects like that — intentionally.
What is it with three? Three is a wedge, and that’s why it works. Three has a sharp point. It’s an odd number so there are no ties. It’s powerful enough to make a dent, but also weak enough to not break what isn’t broken. Big teams make things worse all the time by applying too much force to things that only need to be lightly finessed.
The problem with four is that you almost always need to add a fifth to manage. The problem with five is that it’s two too many. And six, seven, or eight on a team will inevitably make simple things more complicated than they need to be.
Just like work expands to fill the time available, work expands to fill the team available. Small, short projects become bigger, longer projects simply because all those people need something to do.
You can do big things with small teams, but it’s a whole hell of a lot harder to do small things with big teams. That’s a disadvantage of big teams! Small things are often all that’s necessary. The occasional big thing is great, but most improvements come as small incremental steps. Big teams can step right over those small moves.
Three keeps you honest. It tempers your ambition in all the right ways. It requires you to make tradeoffs, rather than keep adding things in. And most importantly, three reduces miscommunication and improves coordination. Three people can talk directly with one another without introducing hearsay. And it’s a heck of a lot easier to coordinate three people’s schedules than four or more.
Three is all-in for us.
DigitalOcean is how the cloud should have been.
You choose a $64/mo server, and at the end of the month you get charged $64.
No NAT_GATEWAY_EGRESS_INTER_REGION nonsense fees.
@astuyve Aws is a cloud provider for companies with teams of devops managing the cloud. If you don’t have those resources there are amazing cloud providers abstracting those issues for you, like @digitalocean
I was 45 years old when I realized I "could not code", despite having written over a million of lines of code since I started hacking as a teenager. After a career as a researcher in academia and industry I had just started at Google writing production code for a devops project, having quit the world of research. It was quite the rude awakening, being taught how to code by talented engineers about half my age. Until then I had written code for research projects to yield results for publication in academic conferences. I know others have produced very high quality software as part of research projects (I'm looking at you @BjornerNikolaj) but that was not true of the research projects I worked on. It was a humiliating and painful process for me, but a necessary one. I am grateful for this opportunity to become a slightly better software engineer. The key things I learned revolved around the social aspects of coding: how to write code collaboratively; how to write code that could endure a long time by being easier to comprehend and amend; how to give and take feedback for improving code; how to track progress; how to throughly test and debug code; how to write design documents; how to communicate with engineers and managers about requirements; and the list goes on. This is what it takes to be a professional software engineer, and it certainly requires process. This type of coding is grindingly slow compared to a life of carefree hacking, and at times it can be soul destroyingly tedious. However, its rewards come in time, rather than in the immediate sugar rush of personal hacking. As part of this devops journey I ended up making a few small contributions to Kubernetes early on. My daughter recently ran the kubectl command (something I contributed to) and I was quite the proud father. So I will not knock process, it is a necessary part of being a software engineer and shipping quality software. However, I will also look forward to one day "retiring" from process, and trying to recapture the magic and excitement of carefree personal coding that I experienced as a teenager with BBC BASIC, BCPL, PASCAL, LISP and 6502 machine code.
@housecor Yeah, arguing a rewrite with “getting bored” is a little bit tendentious. If that your reason to do a rewrite, or the only reason you can find, you are in a bad place
@ahmedjedda213@alexbunardzic I disagree with all respect. If that’s the environment you have, then not refactoring it’s a good idea. The question is why in good environments people still need to think that a refactor is something that should be approved
@ohmypy And what about when we have complex queries and need to write the SQL query and spend hours trying to find out the equivalent fancy new SQL language query? Also, ORMs are good as long as they provide raw queries, but being agnostic? Good for the project, handicap for the dev.
@reactgular @catalinmpit I disagree. Yes you can have chatgpt doing a take home assignment, but for one to solve it the right way you need to prompt the model with the right inputs. If you prompt the right inputs them you pass the assignment with your own merits