Pages

Saturday, April 13, 2019

Did you fire someone before?

I had an interview for a manager position couple months ago and it was going well until she asked me: "Did you fire someone before? ".

I used to answer this question many times before, but many thoughts flooded my mind this time.
  • What if I never fired someone before, How would this affects my application?  is it good or bad?
  • Let's say that they hired me, is it acceptable to start shooting people in the first week?
  • Is this part of companies KPI?!! In other words, would I get promoted if I fired X people?
  • Do I have authority to fire anyone reports to me?
It makes no sense of such a questions rather wasting time and deliver wrong messages to candidates, especially on management level.

Firing people is nothing other than a failure in management level, sometimes it cannot be avoided but usually we can manage to avoid these situations because management is an art of maximize benefit from the available resources, especially when we're talking about human, and the person who inspire, empower and support people is called The Manager.

Friday, February 8, 2019

Microservices for Enterprise

Last week I attend a presentation for a product targets small companies, the feature set was nice and solves many pain-points that industry is facing..
What attracted me was the focus on adoptin microservices architecture, especially scalling capability of this approach.
In fact, I noticed that microservices fans are using scalability as a selling point for there products which in my opinion not the right thing to do!
Off course scalability is a major feature of microservices architecture to handle high work-load, but companies usually have less traffic than website.

In my opinion, what could attract companies to buy software that been built using microservices architecture is modularity, easy to change, introducing features faster and technology freedom!!

Saturday, February 28, 2015

Cloud first: Plan before you move

I’ve introduced Cloud in my previous post Introduction to Cloud, and now if you've decided to move to the cloud, then you have to plan for this action and know some areas that you should take into consideration to eliminate risk, reduce cost and brings your app to cloud faster.
In this post I will focus on know your application requirements and behavior to better judge on which cloud platform will your app best fits in.

Know your Application

Developers, IT Professionals and DevOps are most people who should know the in-hand applications’ requirements in order to run smoothly inside a given environment, however there are some areas should be considered when you decide to move your app into cloud:

Computing Power

Many of cloud providers are calculating cost based on your computing usage, in other words CPU utilization of your app; this means if your application is idle then cost should be 0. but this is not always true! in some cases your application is idle but other background services or the operating system is working to keep your application stand by and responsive for any expected usage, so your cost will hit the maximum value despite your application (front end) is actually used.
So if you know that your application is not going to run 24 hours, then consider to use cloud services that is not counting standby state. basically most of virtual machines (IaaS) will count standby unless you shut it down, and when it’s off, your application is no longer available!
The alternative is even using PaaS or Scaling features:

PaaS

Where you define every application’s role in a separate context and use only needed resources for each role. example of such options can be found on Microsoft Azure, by using a combination of Job Scheduler, Azure website, Azure Cloud Services and SQL databases; the idea here is to distribute your application roles among resources which will calculate cost on usage basis.

Scaling

If you can’t distribute your application roles for any reason, still you can minimize cost by utilizing scaling features, you define the minimum resources required to run the app and then define scaling rules to increase compute power and/or Memory of your system, or even you can configure to scale out to #n of virtual machines to serve the application. Most of cloud providers supports Scaling out/up such as: Amazon AWS, Microsoft Azure… 

Memory lover app (RAM)

Information systems in general are extensively using system memory (RAM), and it is essential to define the RAM requirements for your app. Cloud providers offers many options to RAM lover apps.
You can even pick a very big RAM from the beginning or simply define scale up strategy to increase RAM if needed.
One thing you need to know from the cloud provider that how much RAM you can use for a given VM; Cloud providers offers different types/ series of VMs, some of it with more power computing capability and others with more RAM capability, you should know/ask for such information to decide the appropriate VM for your app.

Data source

Information systems needs a place to store data somewhere, most used option is a relational database (RDBMS), however NoSQL such as MongoDB is available too. there are many discussions on whether using cloud database or install and maintain your database instance by your self on a VM with your App or on a separate VM? this topic is out of this post scope but if you decided to use cloud database, then you need to know it’s capability and limitations!
Some key options of cloud database are number of connections, database size, number of users, Throughput Unit, …etc.Here you can read more about the limitations of cloud database of Amazon AWS and Microsoft Azure.

I/O disk usage and Persistence storage

Some information systems such as drupal CMS, Wordpress, Alfresco…etc uses file system to store files e.g.: images, documents, configurations…etc., and the cloud provider may set a limitation on total number of files that shall be stored on the VM. e.g.: on linux check the inode count limit: use this command to see the limit on your VM: df -i
Another concern of storing files on disk is that VM may provided in a non-persistent mode; this means the VM host system is configured to ignore files stored in the VM in case of restart or recycling it. Instead, you should create disk (VHD) on the provided data storage space and mount it into your VM.

Operating system kernel level integration

Cloud providers may lock the OS integration on the kernel level, modules such as SELinux or AppArmor wont work in these cases! if are planning to use such practice you should conceder this in your Cloud provider check-list.
In fact, I’ve tested the SELinux on a Microsoft Azure VM and it works perfectly.

Conclusion

Knowing your application is key factor to decide which cloud provider you’ll choose to run your application on, and know what services provided by cloud provider is essential to smoothly move to the cloud.
I will discuss migrating your application to cloud in my next article (hopefully next week).