I just started working through Fundamentals of Software Architecture: An Engineering Approach and it's serving as a decent overview of basic software architecture concepts and principles. They also introduce ~10 of the most popular architectural styles and briefly discuss the tradeoffs between them.
+1 for C4 diagrams
Also mermaid js comes with a lot of great graph layouts https://mermaid-js.github.io/mermaid/#/
It's like writing a bulleted list in markdown that gets rendered to a graph
Also not tech but keeping an engineering lab notebook helps a lot. Just large bound graph paper that you can sketch ideas on then scan into Figma or whatever. Slightly more formal than a whiteboard
SQL is a language, not a database. And different SQL databases have different engines, one of those engines may suit your needs. In saying that though, I think there are better solutions than MySQL or MSSQL, but I believe they are both capable when setup correctly. I have little experience with different databases, but I have found elasticsearch with kibana great for time series and aggregation with a UI for graphing. https://www.elastic.co/kibana/ I had IOT devices that just throw a whole manner of different structured objects at it, and so long it had a time and index naming, it just worked.
yeah your'e right, the closest I've been able to find so far is the Bitwarden Security Whitepaper
If you want to test it out locally without setting up a webserver, DNS, etc., you can use https://ngrok.com/. It will give you a publically accessible URL and then you can configure the webhook service to hit that URL.
For more long-term solution, you will need a VPS or something like AWS Lambda with a publically accessible domain.
This is just a suggestion, but you might consider not just how data will be recorded by customers - but how that data will be used later. If you are going to be doing sophisticated filtering on the data later (show me records where the vehicle has 8 wheels, is this type of engine etc.) you can keep it in a NoSQL database as was suggested but you'll need something like Elastic Search (https://www.elastic.co/) to index all the various combinations and find related records.
If the data will be used for analysis in a more structured way, where you're not just doing free text search but you're actually presenting drop-down lists, or user interface elements where people can select from available options to filter by - you might consider transforming the data into a dimensional model. You can find many books online about dimensional modeling, Ralph Kimball is pretty much the expert on that design.
I'm hesitant to recommend this book. I've interacted with the author on Linkedin and he's a real twatwaffle. But the book is great for being an architect in an agile world.
https://www.amazon.com/Lean-Architecture-Agile-Software-Development/dp/0470684208
> if compliment
Hey Daniel, sorry - from first glance I thought that you were talking about Sam Newmans book - https://www.amazon.com/Monolith-Microservices-Evolutionary-Patterns-Transform/dp/1492047848 . I absolutely loved that book and it gave me the tools do some mighty complicated refactoring in our system. Actually from a 'macro-service' to micro-services
I just read your article and it is really neat - explains that concepts and tools how to 'do Microservice architecture' - really nice!
A good book to start with from my point of view is "Fundamentals of Software Architecture" by Neal Ford and Mark Richards. From there on, it would depend on which topics you want to dive into further.
If you're looking at web architecture, this was a book recommended on this subreddit that I also recommend. It goes into scaling of web apps & databases, and how they should be designed so that they can be scalable. It also talks about cache servers, stateful vs stateless web browsing, and other topics related to being able to scale a web application effectively.
"Web Scalability for Startup Engineers" - https://www.amazon.com/gp/product/0071843655/ref=ppx\_yo\_dt\_b\_asin\_title\_o04\_s00?ie=UTF8&psc=1
I've found success at several start ups using Notion
Allows inline commenting, document history, mark up support, code blocks with syntax highlighting, and a bunch of other great tools.
I'd give this a read (link below). If none of it makes sense to you, the other commenters may be right that you're in over your head. In my experience, architecture involves a lot of synthesis of notions from software engineering along with an understanding of the implications of those choices, both for the codebase and for the business.
Hopefully you have a great team to help mentor you if you stay in the role.
use google docs at very least. There are miro.com, whimsical.com, atlassian confluence for help as well. In general, try to move into cloud. Not sure if this is devops work though.
Keep it simple, look at Angular Universal/server side rendering first (https://angular.io/guide/universal).
I don't have a lot of experience with angular universal, but I've used next.js a bit (reacts equivalent)
Thanks. I always thought of Redis just as a cache and was not aware of Redis RDB and AOF. For those who are interested here is a link
Refactoring to Patterns and Refactoring are two good ones I’d add.
Personally prefer vertical slice over clean myself. Love DDD though!
btw.
An additional option here, and many of our vendors effectively using this is - Floating or Concurrent licensing model.
With this approach, you shouldn't usually be worried too much about fingerprinting, as the number of simultaneously running VM instances is restricted by this model.
The only thing I can suggest, is looking at the design a little bit more. I believe taking a more minimal turn would be more attractive to the eye. Surely, aesthetic is more of a personal thing, but this is only my opinion.
You can check this site: https://thenounproject.com/
For transparent png.
Make sure to find a cute colour pallete as well. This site can help: https://coolors.co/
Also make sure to get inspiration of many platforms to see what is out there. My go to is Pinterest, Instagram (I know cliche,lol).
Wish you the best! I am not a pro on diagrams but I hope these tips can help you! Keep it up.
Although scaling isn't only a factor of programming languages and database, following are some of my suggestions.
Programming Language - Use a functional programming language. Erlang, in particular, can scale very well and I have been in projects where we have supported more than a 1M transactions/sec using Erlang VMs. FYI - Whatsapp is written in Erlang. If you are from a Java backgound, Go could be a good choice as well.
Databases - Since you are trying to build a social media app, I can assume the following key entities
3.Frontend - Depends on whether you are looking for a mobile or web based frontend. Would recommend evaluating Apache Cordova. It enables building mobile apps with HTML, CSS, JS. https://cordova.apache.org
The Microsoft guide looks interesting but I personally wouldn't consider Microsoft technologies on this project if I were you (with the exception of maybe [TypeScript](https://www.typescriptlang.org/)). I think you're on the right track though with node/python.
Stripe does not require you do create a customer. In fact, I had this very same question two years ago and asked it on IH. Here's the link https://www.indiehackers.com/post/stripe-integration-unanswered-questions-5c19e25f4d. Most people seemed to had created their customer when the customer created their first subscription. I liked this approach because you only write Stripe data to the database through webhooks which I think is clean.
Stripe lets you pick different webhook for different environment and different endpoints in the same environment. Maybe it would have been better if there was more control about retry logic among different environments.
A few things here.
PostMark is the majority of your answer:
>stored in an excel or google sheets database
This is the glue part, you have a few options of course:
it's hard to answer your question about overthinking without knowing the details.
but you can answer this yourself. try to specify the requirements and then see if your proposed solution satisfies them. if they do can you remove an aspect of the design while still fully satisfying the requirements?
also try to follow known design patterns and architectural patterns. if you're use cases contain a lot of business logic then it's probably best to choose an architecture that emphasizes on use cases like the hexagonal architecture of Alistar Cockburn or the clean architecture from our 'uncle bob' Robert Martin.
https://en.m.wikipedia.org/wiki/Hexagonal_architecture_(software)
https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164
following such an architecture helps a lot in ensuring that future use cases can be implemented as well.
In addition, these two:
Analysis Patterns: Reusable Object Models
Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML
There's nothing new in business software, which wasn't already analyzed, modeled and built before.
Patterns of Enterprise Application Architecture
From there you can branch out towards whatever technical topic interests you, but these 2 are almost essential in my eyes.
Well, it's my job as a software engineer to provide all the information necessary to the business so they can make informed decision.
It's usually a struggle, but I tell them "if we don't do x now, y will happen in the future". Sometimes x gets prioritized and all is well, but sometimes it doesn't and y indeed happens in the future. That's when they start paying closer attention to what I say.
It's even better to send an email with concerns so there is a paper trail in the future if you really have a bad manager who tries to blame it all on software engineers. If that's the case you can skip a level and go to manager's manager.
I would recommend amazing book from Maude Lemaire called Refactoring at Scale (especially chapter 5 which talks about "Getting Buy-In" and has some amazing strategies that have worked for me).(https://www.amazon.com/Refactoring-Scale-Regaining-Control-Codebase/dp/1492075531)
I'm new to the role as well, and I found this really helpful. It was a good level of detail (and you can get it used!): https://www.amazon.com/gp/product/0321815734/ref=ppx\_yo\_dt\_b\_search\_asin\_title?ie=UTF8&psc=1
In general, it looks like a good case to use log-structured storage engines. Compaction process can also be further optimized using B-Trees and LSM-Trees.
I’d recommend the book: object oriented design and modeling in UML. https://www.amazon.com/Object-Oriented-Modeling-Design-UML-2nd/dp/0130159204/ref=nodl_
This diagram doesn’t Appear to be strict UML. But that isn’t often needed. This book is a good resource describing many types of diagrams and how to communicate with them effectively.
For what it’s worth, I’ve been in leadership for 15 years now and this book seems like the best description of my leadings so far; https://www.amazon.com/Elegant-Puzzle-Systems-Engineering-Management/dp/1732265186
This one has some good info:
https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
And prob this:
From what your describing, some Observer Pattern will be useful or Event Driven Services.
Of course you can always create a pipeline using some BPM software and create the right flow using other options.
If you want to start in the role of creating evolutionary architectures, you can read this:
https://www.amazon.co.uk/gp/product/B075RR1XVG/ref=kinw_myk_ro_title
It's so irrelevant it's not worth arguing about one way or the other. But it's worth mentioning. Some people speak in French. Some German. As long as everybody knows what's going on, the important part is conversation and information flow, not the language involved.
There was a book a while back about sketching in general, without UML. Pretty good read. https://www.amazon.com/Back-Napkin-Solving-Problems-Pictures/dp/1591841992