POCs(Proof of Concept) is a standard tool in any software architecture belt. Lots of people just play with some standard APIs all call it POCS, thats not POC. In order to have a POC, you need to establish a goal or concept you want to prove that it works. Calling an API could be a POC? Well, most of the cases not assuming the API works and ins straightforward. However, if the API is hard to call or you need to do complicated things that are not straight forward a simple API call might be a POC. Today I want to share how I do POCs, what kind of POCs I do and how I managed to be effective with them. So I believe this is an interesting subject because most people I know barely do POCs and I do a lot. So Let’s Get Started!

POC Goals

Being a software architect means know trade-offs very well and knowing limitations and sometimes accepting hard choices. All architects should code, thats my understanding, it always was and it always will be. POCs are not consolation prizes to be fair and square. I dont think architects should code only at “POCs time”. Secondly, it’s important to establish the goals you might have for your POCS what you might have different goals and different kinds of POCs.

IMHO you could use POCs for:

1. Reduce Risk and make sure your approach will work.
2. Learn new technologies, languages, frameworks, libraries.
3. Get better and architect/engineer.
4. Help others to grow by sharing simple, effective working code.

Mainly POCs should reduce risk, at work I always approach problems with POCs to make sure I have a “smaller-scaled solution” that works. It’s important to know that a good POC starts with Great Design. You design does not need to be perfect, I mean to cover all scenarios all possible corner cases, it needs to be good enough though. Learning new technologies POCs can be much simple and proof can be “eased”.

It’s important to have POCs as small as possible for several reasons:
1. You will have fewer chances to fail — so you mitigate risk
2. It will take less time and therefore you will do it faster
3. It will be easier to folks see and understand what you did
4. It’s easy to sell ideas, with quick wins
5. It will be less waste if you fail and dont prove your point (Agile Fail Fast principle).

Organization in GitHub

The organization is super important. I have several POC repositories in GitHub here some:
1. Java POCs
2. Scala POCS
3. Go Lang POCS
4. DevOps POCS
5. Rust POCS

And so on and on, I have many more POCs repos. Not all of them are public. It’s important to have a good organization in github for several reasons like:
1. It’s fast to find your stuff(assuming you do a lot of POCs like me)
2. It’s fast to clone, push stuff single all code is segregated.
3. It’s fast for your workmates/friends to see the code since they do not need to clone monolith repos.
4. Isolated repos make you more focused.

So far I dont belive in mono repos and think they are often the wrong solution. So I believe my Github POCs organization reflects thats as well :D

Scripts: The secret to speed learning

So this is the best part. I have plenty of bash scripts to create POCS very fast. So I pretty much have scripts for everything you could image, for instance, I have one script to create a cargo rust 2018 edition project and I have scripts to create scala + sbt projects and I have multiple scripts for Java. Java scripts can be used to create Gradle or Maven projects, Spring Boot 2 has my own set of scripts as well. You might be wondering why? There are several reasons why I do that, If I’m learning a new language it’s 100% sure I will have scripts for it.

There are several benefits of scripts template scripts to start POCs such as:
1. You have an excuse to learn Bash and improve your DevOps skills :-)
2. You will save lots of time configuring things, looking dependencies and configs online, trust me.
3. You will have a fast-forward to create POCs and since it will be a fast and easy project setup you will have more time to focus on what matters, less configuration management and more learning.

Here is one of my scripts for example how I create Cargo / Rust projects.

I hope you guys like it.

Cheers,
Diego Pacheco

Originally published at http://diego-pacheco.blogspot.com on April 14, 2020.

Brazilian, Software Architect, SWE(Java, Scala, Rust, Go) SOA & DevOps expert, Author. Working with EKS/K8S. diegopacheco.github.io (Opinions on my own)