I am one of two technical cofounders for a small software company. We have really good discussions about the design of our product. I am pretty good at searching. We are comfortable weighing alternatives and making a decision and living with the consequences. All that said, sometimes I want to discuss with other people some of the design challenges we face, or seek input on how people have approached the problem.
Are there fora that you enjoy for such discussion? It seems that it does not fit with the theme of most Q&A sites. Most IRC channels I know of are pretty focused on their own specific topic.
2. Make a blog post and share on HN
3. Let the commenters tell you everything you did wrong and what they would have done instead
Put more seriously—I think if you don't have an external professional network to lean on, then you should blog it, talk at conferences, etc. Saying "we aren't sure this is right but it's what we came up with" will definitely invite comment. Keep an open mind and remember any publicity is good publicity: your harshest critics will still be engaging and giving you feedback.
I don't think chat services (IRC, Matrix, Discord) are a good fit here, unless used to talk to a group of people you already know and have some cachet with. But I might just be old-school.
(IE, be careful before you drink the kool-aide on "cloud" or whatever comes next.)
Also, many blog posts are by people trying to make themselves feel important, pad their resumes, or otherwise self-promote. Tone management in a blog post can make an awful architecture sound wonderful. Other wonderful architectures may be the wrong fit for what you're trying to do.
Finally: Avoid many layers of abstraction. It just adds unneeded complexity to your code and makes it too hard to onboard new hires. Carefully review all 3rd party libraries before you commit to using them. Sometimes introducing a 3rd party library to "save an hour today" will quickly "burn a day, week, or month" later.
Beyond being in the boiler room and being a part of a principal engineering community, I basically just do the math and think about it. I also try new things, and I'm building my own architecture at the moment.
The core challenge is that architecture is fundamentally about trade-offs, and it's hard to navigate because we don't share challenges. The essential skill is to solicit a sufficient number of requirements to understand how the trade-offs pull in any direction.
The other thing: there is no perfect, no silver bullet. There can be, however, slam dunks which companies will monetize for specific verticals.
We have folks talking about their technical challenges at work (myself included). I've seen a number of times someone get unstuck talking through on there.
I think live chat is the best way to work through open-ended questions. Like others have pointed out, non-forum QA sites are (maybe just by choice) not great for that.
Feel free to hang out: discord.multiprocess.io.
A second thought, maybe HN can have a monthly "Let me help you with..." thread where people just post their core skill set for others to leverage. As for me, I am not a programmer but am very fluent in infrastructure architecture. I can speak days/weeks on servers, networking, storage, virtualization, operating systems, etc. Always happy to chat with people, understand their problems, and answer questions relative to my area of expertise.
- Paper. We learned a lot from the paper, like Google Spanner, Google Percolator, Raft Algorithm, etc. - Learn from the open source projects and Leverage the power of community. E.g, we learned storage engine from RocksDB, ClickHouse, etc. to build our own engine. We also let the community contribute ideas and codes to our product. - Try to link people as many as you can and learn from them. E.g, when I read a paper, mostly I will try to contract the authors and have a discussion about the paper with them, at the same time, I also ask them to introduce their friends to me for further communication. - Sharing. The more you go out and share like Meetup, Blog, Webinar, etc., the more you get.
I guess my point is be sure to enable paths for those types of roles to exist in your company as it grows - technical leadership that isn't people leadership.
https://randsinrepose.com/welcome-to-rands-leadership-slack/
So far, HN has been the best non-work community for developing my ideas.
My strategy is to find a post like "SQLite 3.39.2" where I will make a comment about how I use that technology and then get into some nuance regarding certain concerns in an indirect manner. Inevitably, someone will gently correct me or provide some alternatives I might not have considered yet.
I have done a fair # of "design reviews" using HN in this manner. I don't think any of this goes against the rules or spirit of the community. Others seem to benefit from reading and participating in the same conversations.
Maybe we need a more long-form aspect to HN where these sorts of conversations would be easier to have?
Good luck.
What helped me was to use the experience that I have from aerospace engineering when making architectural decisions, where we have had to budget and do trade analysis on key performance metrics such as accuracy, mass, power, bandwidth and cost. It's been surprising to me when I talk to seasoned developers who recommend various solutions without first asking me about number of users and requests and data sizes I'm looking to serve.
Recently I was tasked with building a new product that will bring significant revenue to the company. And with that comes tons of new challenges and responsibilities that I haven't had to face previously. From the non-technical side I have to wear basically every hat, project management, recruiting and interviewing, managing the team, etc, because I was given no resources or direction and these things are needed to build a successful product. With that comes lots of people skills that impact the product and architecture, e.g. making sure you hire compatible people, giving people freedom to own things but still giving important direction and feedback, and most importantly reining them back in when they try to introduce the latest tech fad into the product.
Getting back to the question, from the technical side, I had to decide if I'm going to stick with the same tech stack and basic architecture as the rest of our products and if not, I better have a damn good reason. And the truth was, we had essentially zero architecture, and the frameworks we were using in our existing products was a major contributing factor to a high defect rate. And even worse, management assumes I can re-use large parts of our existing products code but that code is tightly coupled to the tech stack they chose. Ultimately the success of the product was on my shoulders. Every night I was reading up on software architecture, researching web frameworks, listening to architecture podcasts. Much of that time was searching HN to read postmorterms of different architectures trying to separate the BS from what works. I chose the hard path of deviating from the existing companies stack. We're now quite a ways into development and that initial effort was worth it. We have a very simple layered architecture in a monolith. Our code quality is fairly high, we have solid unit tests, and our small team is very happy working with the codebase. With that said, I still have imposter syndrome especially when interviewing people that have more experience in areas I'm lacking. And every dev interview I seemingly have to explain and justify why I'm not using microservices!
The "hallway track" is a great place to talk to other practitioners about what they are doing, as well as BOF (birds of a feather) sessions. Especially if you can find a conference with an unconference section (like most DevOps days for example), that's another great venue for discussing things.
You'll also get to meet people who you can potentially reach out to directly with questions. It's a great way to build up a network if you don't already have one.
https://randsinrepose.com/welcome-to-rands-leadership-slack/ can be a good resource for talking with folks of diverse experience and backgrounds about architecture.
- the product was initially developed chaotically, it was a big ball of mud without any architecture, it was hard to maintain
- the first step was consulting with a senior dev from another team (who happened to teach system architecture at a college), he gave directions what books to read, etc.
- then our senior devs completed an online architecture course by a former CTO/turned consultant (I don't know who recommended him, but he's pretty respected in the field, it seems), the class had like 20-30 students with live discussions and practical homework
- then they invited that consultant to audit our code/our processes, he highlighted the problems and suggested changes in our processes
- then we made it obligatory to always have architecture reviews before greenlighting new features, i.e. devs discuss code changes in 1-2 hour sessions, everyone learns in the process (including juniors)
- every year we started sending devs to thematic conferences/meetups where they can talk to other devs and learn how other companies design their products
- we host our own meetups sometimes; there's also thematic Telegram channels both created by us and others
- some devs are good at networking so they can arrange meetings/calls with acquantainces from other companies (in the same field as us) and discuss design problems in person
When he's not available, though, a rubber duck will do. Explaining it to a rubber duck, or even better a friend who has no context into your system. Explaining things simply, just by forcing you to think about them and break them into simple components, helps a lot.
It was originally about a ruby framework, but it's a slack server where we had great architectural discussions all time (still there!). When the discussion gets too complex, we would switch to videoconference.
I would suggest going/presenting at conferences, and networking with the other speakers and form your own network where you can ask questions like this.
I’m happy to be a sounding board for you if you’d like.
AmA
If you want, feel free to reach out via my bio.
Clubhouse was awesome for this until they destroyed themselves.
Once upon a time coffee breaks and after work drinks was the most common time these discussions took place.