Why you need serverless microservices, yesterday!

I have just published my FREE course: ā€œWhy You Need Serverless Microservices, Yesterdayā€œ. Enroll for FREE!

WhyYouNeedServerlessMicroservices_960x520In this course I will walk you through the many benefits of creating serverless microservices instead of the traditional node / instance approach including the use of containers. There are more than enough things to worry about when you want to create a new cloud system or transform a legacy system to operate in the cloud.

From a business point of view, there are huge benefits in going serverless rather than instance based (including containers). A very large jump in business agility can be achieved through focusing on the problems and opportunities rather than the technical jungle of traditional computing solutions.

From a technical point of view, it is almost nirvana where you can eliminate many points of failures in the architecture.

My New YouTube Channel

I just created my new YouTube channel “Creating Great Software”. Have a look.

I will be publishing videos about creating great software including serverless computing in AWS. In addition, I will be publishing my STRONG opinions about the state of the software industry from time to time.

I’m super excited about this new channel and I’m looking forward in seeing your feedback. See you there!

Serverless System Course

In the past 27 professional years, I have been fortunate enough to gain a lot of experience and wisdom in 10 different software industries. These experiences are not just successful accomplishments but also plenty of failures and mistakes made along the way. It is ok to make mistakes as long as you learn from them, only then you will gain true wisdom in anything you do.

Over the years, I have always thought, “If I could gather a small team, I could share my knowledge and we can create great things“. Due to many circumstances, I never had the opportunity to mentor a small team and being in full control on what we would create. By full control I mean free from politics and other constraints. The sort of freedom you need to create and explore ideas without worrying about budgets, timelines, etc. When you can foster such an environment, great things get invented. Just look at the past successes in Silicon Valley.

How can I share my experiences and wisdom most efficiently and help you achieve your goals much more rapidly rather than doing it alone? I have decided it is time to create an online school where I can share all my knowledge and wisdom from the software industry. Well, how about an online course that is very deep in all aspects. An online course that would teach you the birds eye view of concepts and then drills down into the very deep aspects of it. A course that could show you actually how to put the conceptual components together in a very cohesive way. All the different pieces put together in an architecture that makes real sense and is practical and maintainable. We’ll leave the fluff out and concentrate on the entire system starting from a users perspective and walk backwards into the technical implementation details. In short, a

Serverless System Master Class

This master class would be extensive and we will go into a lot of details until we have built a working system that you could use in your future projects. As a minimum, you would learn a lot of concepts and software architecture. Since technology is always changing, I believe that the concepts will be more valuable then the implementation details in the course. In addition, how you bring these concepts together and why are extremely important because in your day-to-day work, you will have constraints that you need to work with and make compromises. There is no perfect architecture and even in this master class, you will touch on many different options one could take and why.

Please let me know if you are interested in the Serveless System Master Class. I would love to hear your feedback as I work on the course. I plan to post regular updates on my blog here.

Leave a comment below or contact me directly at thomasjaeger at gmail dot com and let me know your level of interest, please!

Event Store in AWS DynamoDB

Update 05/27/2019: How to build an event store masterclass” is now available. Learn how to build an event store using C#. NET Core, DynamoDB, MySQL for read models, and more.

In the past few weeks, I have been working on creating an event store in AWS DynamoDB and AWS S3. I use an event store for the domain driven design (DDD) concept in that system. Specifically, one of my systems uses CQRS and Event Sourcing (which is awesome, btw).

The idea for the event store started when I wanted to create my own event store for several reasons. I played with EventStore from Greg Young available at https://eventstore.org/ I encountered errors when I tested EventStore and I expected 100% functionality without issues. Besides, I did not want to babysit another persistence mechanism. I just do not have time for that.

I have created an event store before that was based entirely on Redis. That had worked great and it was super-fast. I used https://redislabs.com/ service to allow zero-maintenance of a fully clustered Redis solution. This has been working for some time now. The only problem was that it can have inconsistencies when it comes to running many applications nodes that use the Redis event store. Long story short, this has to do with complex timing, concurrency violations, etc.

So, I thought there must be a better way. I want zero administration headaches ideally, but I want to take advantage of the consistency capability of the underlying storage mechanism. I want the event store to be a service to the application itself that runs within the same process of the application. So, no need to babysit a separate event store cluster. I want the event store conceptually living side by side within the application.

If I can only take advantage of the consistency of the persistent mechanism, the application can then handle error conditions etc. accordingly based on what the use cases are.

After some experimenting and doing quiet a few load tests using http://loader.io, I can now say that the Event Store in DynamoDB has been born. My first 10,000 user / min load test has passed with flying colors and reached API response times of less than 10 ms with sustained rates of 170 clients / second. All this was running on a single cheap t2.medium instance. DynamoDB had to increase the throttling automatically to take this kind of load. This is one of those cool features, btw.

The event store I created in DynamoDB uses two concepts, Aggregates and Change Sets. Aggregates are the aggregates in your DDD system but only a handful of meta data. Change sets are one ore more domain events that are created when your DDD system processes a command.

I know I can get much higher numbers even by adding additional nodes and doing further tweaking. I would have to do much more load testing of course and tweaking but so far this has been a tremendous success and Iā€™m super excited to take advantage of DynamoDB.

Anyways, I wanted to share this information. Maybe in the in future I can go into much more details. Time is the only problem I have really.

Software Quality

As you may know, I’m working on an open source project called Visual MASM which is an IDE to create assembly applications for Windows just as easy as the Delphi or Visual Studio IDEs provide. Well, at least that is my goal.

I was looking back on why I want to create a commercial application in the Real Estate industry using my very own assembler IDE and was reading what I wrote about using assembly in the first place: Why Assembler?

There are so many languages and tools available today in order to program a solution. I have used almost all of them in the past 32 years of programming. Why on earth use assembly for Windows? For a clear business reason, Windows “owns” the world wide market and is used in over 90% of computers as of today. Never mind Linux, MacOS, etc. I mean, Windows “owns” it. Period. It makes total sense to develop for Windows when you create a commercial solution.

The fact that Windows owns the market; however, is still secondary to my motivation to create a commercial application for Windows using the assembly language. The main reason is really: Software Quality.

Quality in general, in my opinion, means paying attention to every detail. Because one pays attention to every detail, you are forced to make many decisions. As you abstract into higher languages, these decisions have been made for you. Because of this, you are no longer able to make detailed decisions. In order to pay attention to the detail of software quality, you have passion to follow through with it. Being able to make these detailed decisions also offers freedom and control of the creation process. That’s the ultimate power of high, software quality. You must have control in order to make software quality decisions.

So, paying attention to detail with passion is equivalent to high software quality. It is that simple.


How to be a great programmer

I have been programming since I was 15 at 1985 starting on an Amstrad CPC 464 on 8-bit Z80 processor at a whooping 4 Mhz. The programming language used was Locomotive Basic for the Z80 processor. This is my first exposure to actually tell a computer what to do, and it did it by coding this:

10 Print "Hello"
20 Goto 10

It printed “Hello” on the screen and kept going. These simple lines woke up my passion and my amazement of the computer and it’s software. The computer did what I just told it to do, over and over. That was 32 yeas ago and I still love creating software, love seeing creativity transformed into something useful and beautiful at the same time.

The reason I’m telling you this is because I want to set the stage of what I have learned over the past 32 years on how to be a great programmer if you so desire. What I’m about to share with you are my own experiences and opinions.

Here are a few things that you either have or will gain over time as a great programmer:

You care

As with everything in life, if you care for something, you give it special attention. Now, programming a computer needs your special attention already because the computer will not allow for any mistakes simply because there are no gray shades. What I mean by that is that the computer is absolute, true or false. When you care, you pay special attention to the software you program. What does that mean? You care how you compose your pieces of code in whatever programming language you use. Is your code legible? Can you understand your code 6 months from now? What does the architecture look like? Have you even thought about it? How does any data flow between your methods and functions? Where does it start and where does it end? Can you follow the money within the programming code? Do you care enough to rename your variables and functions to something more understandable after requirements change? Do you care enough to reduce any technical debt meaning do you care enough to simplify your code to make it easy to maintain? Do you care enough to remove dead code? Do you care enough to be open for new ideas on how to do things differently than what you are used to? When you care, you pay attention to the smallest details. You pay attention to quality on what you program into the computer.

You love creating

A writer creates a book by composing letters and words in such a way that produces interesting stories. A writer would use modern tools such as a computer with a great word processor or maybe even an old fashioned typewriter. The tools a book author would use are the means to an end. The creative part is all in the authors head. The art is the intuitive process of creation that is unique to the author. The very same thing can be said for a great programmer. When you start coding, you are composing instructions for the computer to execute. The creative part is on “how” these instructions are executed in such a way that produces software, the end product. How satisfying is it when a customer/user tells you “I love this software”. When a customer tells me that they love my product, it makes my day and this is exactly why I love creating great software. Every programmer wants to be recognized in some form or another for his or her creativity to solve a problem. After all, programmers are problem solvers. We solve problems with our code. Our code is our magic dust that erases issues and makes people happy. How cool is that? How cool is it to start from an idea to something tangible that people can use? Doesn’t every creator want their creativity to be seen, used, and acknowledged? You have the power to change the world with your creativity.

You love problem solving

Programmers are problem solvers. That’s it. I love solving problems with a creative approach. The way you attack problems can be in different ways. It becomes even more interesting when you solve problems that are considered not the norm. You think out of the box. Many times, you do not have to re-invent the wheel because somebody has already solved a problem in the past in some form or another. If that is the case, take a close look how the problem was solved. Would the solution fit on what you are trying to problem? Can you adjust the solution to fit your needs? Can you improve it? Or, can you come up with a unique way to find a solution to a problem? How do you approach the problem? I find solutions to problems in all kinds of places, while taking a shower, while shaving, while starring into the sky, while playing a computer game, etc. When you get ideas to solve a problem, it is one of the super exciting moments when it happens. My point is that your solutions can come anytime. It does not matter if you are sitting in front of the computer or not. You should be open to think and analyze about problems no matter where you are. Give these moments a chance hen they come, explore it further and be open to whatever idea will come to mind.

Stay motivated

You will not be able to create fantastic code if you are not motivated. You have to be motivated and enjoy programming in order to produce some amazing creations. You have to get your juices going. For some, like me, you have to be in the “zone” for some crazy creativity to come out of your noodle. For me, listening to music while programming get’s me into the right mood and kick of some “zone” explorations. So, if you are motivated on one day, how do you stay motivated the next day? One thing I do that has worked for me for many years is that I “carry over” motivation to the next day. The way I do this is as follows: when you work on a particular challenge to solve a programming problem and you eventually find a solution to it, do not implement the entire solution the same day even if you could implement it within minutes. Don’t do the whole implementation. Keep some of the implementation for the next day. When you do this, you can start programming the next day and “re-ignite” that motivation to complete it. What will happen is that you are now on a roll and you will be able to pick up other challenges easier and keep the momentum for that day. This little trick of “carry over” has helped me many times of the years. It unleash some energy the next day even though you may have not felt like it to program at all.

Be willing to learn

A great programmer NEVER stops learning on how to program in different ways even how to program in different languages. Study other peoples code when you have a chance. This will give you an insight of somebody else’s line of thinking to find a solution. This might show you some ideas that you were not thinking about before. Be willing to learn from others, always. Don’t think you know it all. There is no such thing. There will always be somebody else you knows a lot more than you do. So, be willing to learn from anybody. It does not matter if the other programmer is a junior or a senior programmer. Stay open to learn especially “how” they achieved a certain solution.

Learn assembly programming

Yes, you read correctly. Learn how to program in assembly. I know there are tons of high-level languages that you can learn as a programmer such as Java, C#, C, C++, Delphi, etc. However, trust me when I tell you: “You will be a better programmer when you learn how to program in assembly”. You will have an edge over somebody who does not program in assembly. Believe me. What programming in assembly will teach is invaluable compared to any other high level programming language. You will truly appreciate the power of the computer. You will be able to see into the insights of the computer. You will be on a higher level of technical excellence when you know how to program in assembly. I personally love Microsoft’s Macro Assembler (MASM) for Windows over all the other assemblers for many reasons. One reason is simply that Microsoft has pored a huge amount of resources over the past 36 years into MASM. MASM was created in 1981 and no other assembler has received this much attention, ever. Microsoft maintains MASM today. When you learn to have absolute power of the computer and with absolute freedom to create ANYTHING you want with assembly, you will gain a level of insight that is hard to describe. In many ways, assembly is actually easier than many high level languages. It is absolutely fascinating to be able to directly manipulate a CPU register. It is fascinating to change one bit and affect an outcome of an operation. Just fascinating. I could list many other reasons why but I leave it up to you if you want to step up to be a great programmer and learn how to program in assembly. Start creating a simple Windows app in assembly and then feel the power. You won’t regret it.


I hope that the above points will help those who aspire to become great programmers. Stay fresh; stay crazy because you have the power to change the world!