340 karma · joined December 4, 2012
It allowed me to spot the best brands and sometimes even products in verticals I knew nothing about beforehand. It’s not perfect but already very efficient.
I would say don’t judge yourself too much. You don’t have to be perfect (especially if you are not, and nobody is). You probably are in this business to learn, so give yourself some room to learn a bit (or a lot!) more. People that criticize your work may be wrong. Don’t take their criticisms as absolute truth. In case you feel they may be right, drop your ideas right away, ruthlessly steal theirs and make them yours. This is how you don’t get stuck in local minima. You don’t have to care about having been wrong, there are more constructive things to do.
Yet many great suggestions on this topic but one is missing, which in my opinion sums up a lot of the software design classics : « The Design of Everyday Things » by Don Norman.
Services, micro or not are only really useful when load factors are vastly different and you’re not serverless. Or when you have sufficiently many large teams and a sufficiently large codebase that a single deploy becomes unmanageable because too much communication / coordination is needed.
This microservices craze has been mind-boggling. As for many other fashions, it’s excruciatingly difficult to make young or even average senior devs understand it’s bullshit at 90%.
When Netflix does it and the self-appointed expert bloggers praise it, as a CTO or team lead you’re pretty much screwed.
« Test-driven development (TDD) is a software development process relying on software requirements being converted to test cases before software is fully developed, and tracking all software development by repeatedly testing the software against all test cases. This is as opposed to software being developed first and test cases created later. » [1]
https://scikit-learn.org/stable/tutorial/machine_learning_ma...
What it doesn’t have is clustering and a father that’s != null at marketing =]
What I was feeling and trying to convey is how it flips the design process from bottom up to top down, by forcing the design of the interface first. From my experience you miss a lot by doing that. The reason is when you start from the code interface based on some requirements you most often find an impedance mismatch when you reach the bottom AND you don’t get the chance to tweak or rethink the requirements from straight, simple bottom-up code. Requirements being natural language and by nature informal and incomplete (else they would be code), building on them is risky. Building on the software APIs you stand on (starting at the bottom) is much less prone to change. This is the sound approach in my opinion from an engineering perspective. You start from what exists and what you stand on and grow you software by aiming for the requirements, trying to land the closer you can to them.
This process of discovering natural interfaces that emerge when you specialize a lower software layer API is the most profound and impactful realisation (and huge boost in both productivity and quality) I had in 25 years of programming.
Everything starts to fit, have easy path forwards, becomes easy to maintain and evolve.
I think the gut feeling I have when I see people advocating for TDD is that. I feel it will prevent proper co-evolution of code and requirements, and lead to the usual mess.
You’ll get proper back pressure on websockets with synchronous clients that read messages actively.
This is a browser API spec problem more than a protocol problem.