Tech Choices I Regret at Spectrum

0xedb | 309 points

It seems contradictory to me that author learned to "deliberately assess cutting edge technologies, bias towards conservative choices," yet he regrets not using react-native-web and Next.js.

stockkid | 5 years ago

I think that the most important line in this article is "Changing these decisions would not have made Spectrum a better product by itself."

Assuming that you make somewhat reasonable choices in the first place, technology likely won't become a problem for quite a while. At which point you either have succeeded enough to have the resources to fix the issues that come up, or else you have bigger problems than technology and should focus on those instead.

dlevine | 5 years ago

Making mistakes means the author delivered a lot of features to users that they wouldn’t have otherwise.

RethinkDB sounds terrifying though, I’d hate for my DB errors in production to literally have no idea what to do, it makes me feel sick thinking about :-)

I think we should aim for kludgy but boring working solutions first - for example I’m tempted to write a redux middleware that sends dispatched actions to the server and manually sync, order and manage conflicts in these events to build a “perfect” system where front end state management and backend CQRS perfectly marry up. It’s a terrible idea because I know how to build the Podcast app I’m making perfectly well without any of this nonsense.

andy_ppp | 5 years ago

I clicked on this hoping this was the "Spectrum" cable ISP. We don't hear too often from ISPs and infrastructure companies on HN.

TimTheTinker | 5 years ago

I am right now on the train home from work quite late (22:40 local time). The reason I spent so long at work today is because we update after 8 o'clock. However, we found a critical bug in some open software that we use that we do not know why it triggers. We barely even know how it happens! Of course we haven't been able to solve it yet... After personally spending a lot of time with trying to fix the software I can say that I have gotten a much deeper appreciation of tools that are widely used and with an active community, where most bugs have already been solved.

Previously I had believed if you had a tool that solved the exact problems you have, then you should use it. I hope I'll resist such an urge in the future by having a little pragmatic angel on my shoulder reminding me of the danger of underused software. No software is perfect and even tough you might be able to fix software when it is open source, you paint yourself into a corner when you will necessarily have to fix it.

I felt my experience was matching some of the authors woes and I urge anyone that chooses technologies to think one step ahead and learn from our mistakes!

catears | 5 years ago

> We are building native apps now, but starting from scratch is time consuming. If we had used react-native-web to build the website, we could have reused the base components and built the native apps much faster!

> Optimize for iteration speed and flexibility.

Faster, but not necessarily better. Reusing web technologies for mobile is almost always an optimization for developer time, which might work early but I feel almost always ends up needing to be rethought in the future.

saagarjha | 5 years ago

On the side I'm building a communication app myself and I've started over a few times now. I made some mistakes in early development that caused starting over to be the best choice (I'm not a perennial start-over guy, things weren't very far along when I restarted, this is just a side thing).

Mistakes: I did plenty of backend work (e.g. gRPC services) just to realize it didn't mesh well with the frontend when I started to build it. I over-complicated the feature set and realized I built a foundation for an MVP that would take forever. I abstracted everything because in my head I thought about all the future uses. I worked on an advanced-tech frontend that kept me bogged down in frontend development instead of doing the whole thing. All of these are typical mistakes of pie-in-the-sky side projects sans deadlines.

For the latest iteration I have changed my approach. I am building the dumbest web UI w/ the dumbest in-memory-only-at-first backend with minimal abstractions. The initial web UI doesn't even use any JS which I know can seem like extra work w/ HTML forms and the like, but the raw simplicity is easier to build now and take away later than something more complex. I'm deferring lots of features. Once I reach a web-UI-only MVP, my next step will be to abstract what already isn't on the UI front and make a Qt app that uses the same abstraction. I've found this to be the easiest way to get some UI idea reuse across different paradigms. I can add more UIs including an API, terminal, mobile, etc with this approach. For the backend, simple gRPC backed by a "db" of in-memory data structures for now until I abstract that to allow sqlite to join and then on from there. It is very refreshing to develop a full-stack app without a complex full stack. The major benefit of developing a stupid-web-with-in-memory-db MVP? Testing and quick iteration. I've found you can iterate on core structures/ideas or you can iterate on external tech/features, but you can't do both at the same time.

kodablah | 5 years ago

I feel like they missed a couple of critical takeaways: First, build on technologies you already understand, if possible. Don't build from scratch on something you know nothing about. And second, make sure you have some backend expertise on your team. He says up-front the three person team was heavy on design and front-end expertise. So it's not surprising at all to me that they had big problems managing and troubleshooting their poorly chosen backend tech.

skywhopper | 5 years ago

A great mobile experience on desktop is bearable and only needs tweaking to work well.

That depends on your product and your audience! Many (probably most) B2B apps work poorly in the constraints of mobile. If your users spend their 9-5 hours buried in your app at the office, they probably value things like hotkeys, multicolumn layouts, and high-information-density pages.

stickfigure | 5 years ago

RethinkDB, an ironic name in this context.

quickthrower2 | 5 years ago

Regrets: not using cool new frontend things while using cool new backend thing.

lxe | 5 years ago

Not using something seems like a hard case to make. The author doesn't know what would have happened had he used another tool. However, I do believe it's possible to properly evaluate a tool after having used it, so... 2/4?

ppeetteerr | 5 years ago

I admit I'm hoping (although not remotely expecting) that now that Spectrum is part of the GitHub/Microsoft nexus, they'll contribute some development time to getting RethinkDB going again, even if it requires another fork -- there was a brief "RebirthDB" fork that was, theoretically, going to become the official release, but that seems to have stalled, too. The 2.4 release has been "nearly ready" for over two years now, and I'm kind of afraid that the lost momentum will be unrecoverable very soon, assuming we're not already past that point.

chipotle_coyote | 5 years ago

RethinkDB was so promising and still is in a way. It just didn't take off as an open source, openly government project (yet). It's still early though. I hope it forms a great community around itself and becomes a major open-source database offering. Apache or CNCF adopting it wouldn't be the worse thing ever even though not a super CNCF like product.

owaislone | 5 years ago

I worked at a startup that used RethinkDB too.

Change feeds sounded cool, but we never used them in the end, because of the latency.

I didn't use react-native-web, because back in the days it was alpha and later there was react-native-dom, which seemed like a better approach, but I have the feeling it doesn't have much pace to get anywhere any time soon :(

k__ | 5 years ago

This is tangential/possibly off-topic. I was wondering if anyone could educate me as to why this site needs to use next.js in the first place (the site of the blog, not spectrum). It's mentioned in this blog post and I followed the link. The full tech stack is given here -> https://github.com/mxstbr/mxstbr.com#tech-stack

I went through the codebase, and the content itself is static. I'm not attempting to bash the decision to use next at all. I'm only looking to grow my understanding of the usage of next since I see it being mentioned a lot.

The question I have is, why use next/react for what appears to be a static site. Or, why not use static html + markdown?

Again, not bashing. Just looking for reasons that I might have missed due to my lack of understanding/context.

nstart | 5 years ago

Some of these seem difficult to predict. If you knew in advance that Github would acquire, WYSIWYG over markdown wouldn't have been a priority. You couldn't have known that, however. Developers know markdown, web creatives know markdown, but does anyone else?

jessaustin | 5 years ago

Summary: "computers are hard, getting the software written correctly even harder". Yeah, that's right! If you're struggling with this, it time to seriously consider another profession.

Barrier to entry being low is really misleading. It never was low and because of how generic and complex computer systems are, it isn't low now. It will only get more complex as time goes on, unless everybody pulls together and fights tooth and nail to go back to writing small, fast software. Anybody considering "I just want to program and not worry about low level details! Which framework can I use?" should stop dead in their tracks and seriously consider what they are doing with their life.

Annatar | 5 years ago

I ran into similar issues with Draft.js, but Trix has been amazing:

https://github.com/basecamp/trix

It's not that hard to wrap it as a React component and get going with it

shay_ker | 5 years ago

Kind of impressive that they built Spectrum with just three people. Nice write up.

mxxx | 5 years ago

I created a public community for Hacker News itself: https://spectrum.chat/hackernews

Something that I have always disliked about HN is the lack of the ability to delete comments and accounts. OTOH, Slack etc are private and lock up good content/discourse away from search engines. Hopefully, spectrum will offer a better balance.

wavicle | 5 years ago

The name "Spectrum" has regrettably been ruined by Charter, which has the same poor and indifferent customer service for last mile cable internet customers as other competing giants like Comcast.

walrus01 | 5 years ago

Was using node over another language/ecosystem a baked-in requirement?

andonisus | 5 years ago

Seems like some pretty domain-specific(frontend)choices about which $jsThing to use, and one pretty bad operational miss on choosing a DB tech correctly.

Tehchops | 5 years ago

Interesting read, as always the business value is the one that should be assessed for technology adoption, not coolness factor.

pjmlp | 5 years ago

What would you replace Draft.js with? Slate?

fourstar | 5 years ago

Rethinkdb was complete trash. A bane to run and pathetic at scaling.

Small backups took hours. It was extremely difficult to tune.

honkycat | 5 years ago

The examples are quite interesting but the insights / conclusions are far too simplistic and overreaching

aboutruby | 5 years ago

Seems like bad choices and lack of research.

dirtylowprofile | 5 years ago

Way too many developers are shocked to learn that Postgres has an existing Pub/Sub system using LISTEN and NOTIFY. Kind of makes some people rethink their stack.

matte_black | 5 years ago