Photo by Jon Butterworth on Unsplash

Software Architecture for the Non-Experts

Berk Orbay
DataBulls
Published in
4 min readSep 24, 2023

--

Assuming your team is experienced in development for analytical purposes (e.g. Python, R, Julia), but you have no real devops/mlops help. You are either putting together an MVP and you need some infrastructure to publish your service to production. IT support is either too expensive or you are given a date for four months in the future. If so, this post is for you.

Good news! With today’s tools, you can start off your project with a well enough infrastructure with open-source tools with adapters to popular languages.

This post is not an expert opinion. It is actually written as a reminder to me to keep things simple in order to go fast.

Basic Architecture — Path of Least Resistance

You need to constantly remind yourself that this is just v0.1 (not even v1). All you have to do is to have the product/service meet with the user. Your only prerequisite should be “it just works”. Your main aim is to achieve that

Let’s also assume that, your production environment is the cloud (AWS, GCP etc.). If not, probably your job is easier and your customer base is narrower.

Almost every system has the same basic requirements: Data storage, computation (assume storage for this is different), interconnectivity between those entities and access point.

For instance let’s assume you are building an multiplication service for two numbers (e.g. a=3,b=5 result is 15) in Python. Let’s assume you are also logging queries and errors.

  • Data storage: Logging purposes. AWS S3 is just perfect.
  • Computation: You can use one of the instances (EC2) and install requirements or you can go Docker way (see below).
  • Interconnectivity: Just use Python wrappers for AWS services (boto3).
  • Access point: You can wrap your functions with FastAPI and easily serve. You can easily find your way around networking and ports.

Why Containers (Docker, Podman etc.)?

Even though your project is simple and small it will need some requirements. You will still need to install those requirements. Docker provides an abstraction to your project building in a very convenient way. Because, with the help of Docker, you can immediately deploy to production with any number of services. For AWS, some such services are ECS, Elastic Beanstalk, AWS Lambda (in some cases) and AWS Cloud Runner.

There are more important and many more benefits to work with containerization (Docker/Podman etc.). But it is the topic of another discussion.

Why avoid no-code?

No-code solutions are generally low-code and you are usually better off with some Python or R library than with low-code code solutions. Most of the time no-code solutions will come with a price tag attached through an external infrastructure (cloud) which can be substituted with a good enough or better open source library (mostly because these no-code solutions also depend on those libraries). Also vendor lock-in and being unable to do something custom with your no-code solution are other concerns. Nevertheless, keep an eye out for no-code solutions but don’t hold your breath.

Other notes

  • You may not need services such as AWS S3 to further simplify your architecture. But, assuming your computation infrastructure is quasi-ephemeral (i.e. when server is shut down, your data is gone too) it is better to make use of persistent storage services.
  • Containerization (Docker, Podman etc.) is not a hard requirement. Though, it is easy to learn (the basics), it is a best practice and it reduces further workloads a lot. Your marginal development costs will be dramatically reduced with Docker. You can either go with a full tutorial (example) or learn Docker separately first (recommended).
  • Make authentication as basic as possible (non-existent, hand generated api-keys, hardcoded users/passwords etc.). If you fancy something more complex, go with JWT. Easy to learn, hard to grasp why at first but it makes sense. And then you can introduce some authentication library. If you really must, you may go with Firebase Auth or AWS Cognito to abstract away authentication.
  • Security is a real concern but you are at the very early stages of product/service development. Plan for security but go easy at the very first stages.
  • Scalability is your enemy. Unless it comes for free or dirt cheap (e.g. can be run in Lambda environment), do not attempt for scaling.
  • Be prepared to ditch almost everything for v1.0.

More…

--

--

Berk Orbay
DataBulls

Current main interests are #OR and #RL. You may reach me at Linkedin.