Category Archives: Development Models

Using Docker To Deploy Applications To Azure Container Instances

This text was taken from the book and a Udemy course The DevOps Toolkit: Catalog, Patterns, And Blueprints

Help us choose the next subject for the course by filling in a survey at https://www.devopsparadox.com/survey

Azure Container Instances are a way to deploy containers in the Cloud. Based on that, you might think that ACI is not much different from other Containers as a Service solutions. But it is. It does not have horizontal scaling, nor any other features often associated with schedulers like Kubernetes. It is limited to the ability to run a single container in isolation. It is very similar to using Docker, except that it is in Azure, and that it saves us from worrying about the infrastructure needed to run containers.

So, if Azure Container Instances are very similar to Docker, why not use docker instead of az CLI? Fortunately, folks at Docker asked themselves the same question and released Docker Desktop that supports ACI. It is available since version 2.3.3+.


Continue reading

Discussing The “Real” Expectations For Serverless Computing

This text was taken from the book and a Udemy course The DevOps Toolkit: Catalog, Patterns, And Blueprints

Help us choose the next subject for the course by filling in a survey at https://www.devopsparadox.com/survey

What do I expect from serverless or, for that matter, any type of deployment services?


Continue reading

What do I really think about managed Functions as a Service (FaaS)?

This text was taken from the book and a Udemy course The DevOps Toolkit: Catalog, Patterns, And Blueprints

Help us choose the next subject for the course by filling in a survey at https://www.devopsparadox.com/survey

Personally, I do not think that managed Functions as a Service are a good idea. Functions are too small for my taste. The execution model in which each request is served by a fresh instance is deeply flawed. The pricing is too high for my budget.

All that being said, I can see use cases where managed FaaS is a perfect fit, but only if that would be the only flavor of serverless deployments. But it's not, even though many are putting the equation between FaaS and serverless computing.


Continue reading

Should we use managed Functions as a Service (FaaS)?

This text was taken from the book and a Udemy course The DevOps Toolkit: Catalog, Patterns, And Blueprints

Help us choose the next subject for the course by filling in a survey at https://www.devopsparadox.com/survey

We should ask two significant questions when contemplating whether we should use managed Functions as a Service (FaaS) flavor of serverless computing. Should we use them? If we should, shall it be AWS Lambda, Azure Functions, Google Cloud Functions, or something completely different?

So, should we use managed FaaS? We probably should. But that's not the right question. We can almost certainly find at least one good example. A more important question is whether managed FaaS can be the solution for a significant percentage of our workload. That's the question that is much more difficult to tackle. To answer it, we might need first to establish good use cases for deploying and running functions.


Continue reading

Improving And Simplifying Software Development With Jenkins X

Software development is hard. It takes years to become a proficient developer, and the tech and the processes change every so often. What was effective yesterday, is not necessarily effective today. The number of languages we code in is increasing. While in the past, most developers would work in the same language throughout their whole carrier, today it is not uncommon for a developer to work on multiple projects written in different languages. We might, for example, work on a new project and code in Go, while we still need to maintain some other project written in Java. For us to be efficient, we need to install compilers, helper libraries, and quite a few other things.

Continue reading

Software Projects for Clients vs Product Development

large_6237893181The two most common business models among software companies are based on doing projects for clients or investing in product development. While both models can be rewarding and profitable, there are important differences that might make one model more appealing than the other. Moreover, initial investment and future predictability for those models are quite different. While one provides return of investment in a short period of time, the other requires a lot of time and money with unpredictable future but potentially much higher rewards.

Projects for Clients

Your clients are contracting your company for various reasons:

  • They do not have expertise or tools to do the job themselves
  • They do not have time to complete the task
  • It is cheaper for them to contract your company than to do it themselves
    Continue reading

Tranformation requires management support and coaching

To survive, you've got to keep wheedling your way. You can't just sit there and fight against odds when it's not going to work. You have to turn a corner, dig a hole, go through a tunnel - and find a way to keep moving. - Twyla Tharp

medium_512406438Customer is unhappy with how the provider works. Due to some contractual and logistical reasons customer cannot change the provider so he chooses to force the provider to improve by adopting more iterative and incremental way of development together with other Agile practices.

Provider is not happy with the decision. He is risk averse and any change is considered a risk. Risk mitigation of this transformation receives bigger priority than the transformation itself. Management is so concerned with risks that it does not even try to understand what the transformation is all about. Any deviation from the Waterfall model and practices established years ago is considered unacceptable.
Continue reading

Programming explained to non-programmers: What we do, how we do it and why some children end up in the intensive care

I am often asked by non-programmers to explain what I do and how I do it. Following is my answer.

I am a programmer and, like many others in my profession, I am a nerd.

"Wonderful thing with nerds: they're enthusiasts. Not having a life means you get to love things with a passion and nobody bothers you about it." - John Burnside

Many think that computers are really smart. They are not. They are as dumb as it can be. What they excel at is crunching numbers very quickly. They do not know how to think or reason. They do exactly what we tell them.

The job of a programmer is to translate real-world problems into numbers that computers can understand. A computer is like a child that will do everything you tell him to do. What you want him to do is irrelevant; the only thing that matters is what you tell him.

On rare occasions when my daughter does actually listen to me, our relation is similar to the one of a computer and a programmer. I'm trying to make her do something and she's testing my patience by doing what I tell her to do instead of doing what I want her to do.
Continue reading

Project Prerequisites: 3 types of tools no project should start without

You got that great idea for an application that will be a huge success. High level feature set and design is done and you are ready to start bashing the code. Before you do, you might go through a checklist of tasks that should be done before the coding starts.

There are three things that I consider as prerequisites of every project (apart from knowing what the high level scope of the project is).

  • Some kind of a project management tool or a task tracker
  • Version Control System (VCS)
  • Continuous Integration (CI) framework with jobs for each phase from the build to deployment

I, for one, am often inclined to simply start bashing the code. However, that temptation should be avoided in favor of a better and more stable project development.
Continue reading

Software Development Models: Iterative and Incremental Development

Waterfall Model
Iterative and Incremental Development

Iterative and Incremental Development

Iterative development was created as a response to inefficiencies and problems found in the waterfall model. Modified Waterfall, Rational Unified Process (RUP) and most, if not all, agile models are based on iterations.

General idea is to develop a system through iterations (repeated cycles) and incrementally (in small portions of time). Through them team members or stakeholders can learn from their mistakes and apply that knowledge on the next iteration.
Continue reading