Category Archives: Best Practices

(Unit Testing) – Cost vs. Benefit

In the current world of marketing, where we have clients who want to run campaigns in next 2 weeks, we can’t be slow in how soon we release code. You can only be relevant in the industry if you can move quickly, achieve the Continuous Delivery or at least reach a point when you can get releases out in production with a reasonable speed. Those days where releases used to happen once every 6 months are gone; or at least gone in the environment/market I am operating.

We have to have Self Testing Code, We have to Unit Test, We have to have feedback loops and We have to have feedback loop as soon as possible. There is no avoidance; let’s understand and embrace Or be extinct in a few years.

Unit Testing – Why not?

Not doing Unit Testing (again not saying “automated”), is like someone telling me – Kapil, you are driving to go to your wedding and you are late and now you have to drive faster. But, instead of putting in a few more airbags and giving you better set of wheels, better brakes; We are going to take the 1 Air Bag you have today and also replace your wheels with an older set. Now, go drive else you will not get married. What do you think I would do – Drive faster and risk my life or start driving even slower because I hope that my would be wife loves enough to know that I had no option but to drive slowly. Well you get the point – While I may get married, She is going to stay mad at me for a very long time for ruining her perfect day.

Thick Clients and CMS

Can a technology like Angular be used in the world of a CMS to solve the process problems where it just takes too long to get HTMLs from Site Developers into CQ’s templates and that too with a degree of quality that we are expected to deliver. This article lays down the foundation of what the challenges are and how it has started to impact our day to day life. The answer is not that simple, but at the looks of it, it seems we are using a technology to solve for a problem which is actually a people or a process problem. You can of course introduce a new component in the mix, but I still believe until people are ready to change, this new component wont do shit.

Caching Architecture (Adobe AEM) – Part 1

Cache (as defined by Wikipedia) is a component that transparently stores data such that future requests for data can be faster. I hereby presume that you understand cache as a component and any architectural patterns around caching and thereby with this presumption I will not go into depth of caching in this article. This article will cover some of the very basics of fundamentals of caching (wherever relevant) and then will take a deep dive into the point-of-view on the caching architecture with respect a Content Management Plan in context to Adobe’s AEM implementation.

 

Problem Statement

Principles for high performance and high availability don’t change but for conversation sakes lets assume we have a website where we have to meet the following needs.

  • 1 Billion hits on a weekend (hit is defined by a call to the resource and includes static resources like CSS, JS, Images, etc.)
  • 700 million hits in a day
  • 7.2 million page views in a day
  • 2.2 million page views in an hour
  • 80K hits in a second
  • 40K page views in a minute
  • 612 page views in a second
  • 24×7 site availability
  • 99.99% uptime
  • Content availability to consumers in under 5 minutes from the time editors publish content

While the data looks steep┬áthe use case is not uncommon one. In current world where everyone is moving to devices, and digital there will be cases when brands are running campaigns. When those campaigns are running there will be needs for support such steep loads. These loads don’t stay for long but when then come they come fast, they come thick and we will have to support them.

For the record, this is not some random theory I am writing, I have had the opportunity of being on a project (I cant name) where we supported similar number.

The use case I picked here is of a Digital Media Platform where we have a large portion of the content is static, but the principles I am going to talk here will apply to any other platform or application.

Learning MongoDB // The CRUD

The other big takeaway was that working with mongo’s document structure is much more simpler to what RDBMS is. While was I working in mongoshell where I was using JavaScirpt to write code and later when i moved over to Java classes it was fairly simple. It was all about knowing 3 classes (if not 2) and you are done. Working with Maps (or Dictionaries) is pretty simple and using that knowledge in any language cant really be difficult. I was able to go back and learn JavaSciprt all over again and code a logic pretty quick.

A POV on Slice (a Adobe CQ Framework)

To sum it up in plain english – Not a lot of rope to hang off of; very little use cases to use and not exciting me as much.

For anything that is enterprise or platform(ish), I won’t go for this. The technical overhead that this framework and what it solves for is not worth the ROI of managing another framework. If I’d come across strongly types content-types, I would consider to use this. The ultimate tie breaker would be how how many of the content-types need to be displayed “as-is”. If all i had to show are several compositions of data (search or what have you) maybe not. But, definitely something to consider

Modeling Content in CQ54

CQ54 is not a a typical RDBMS where I can model a set of relationships in table and soon a pretty picture starts to present itself. CQ54 stores everything in its content repository (CRX) as nodes which follow an entirely different data model i.e. Hierarchical Structure. My experience with hierarchical databases has been with day…

NTLM Authentication in Java

Many years back, I moved over into Java world and when I was asked to implement my very first security implementation, I realized that there was no easy way to do this and many clients would actually want us to use LDAP for authentication and authorization. For many years, I continued to use that. And, then one day in a discussion with a client, we were asked to provide SSO implementation and client did not have an existing setup like SiteMinder. I started to think about if we can go about using NTML based authentication. The reason that was possible was because the application we were asked to build was to be used within the organization itself and all the people were required to login into a domain.

Internet Filter Bubble

I have been a part of a project/product where we did have similar discussions and ensuring that people are getting information relevant to them. The filter bubble that Eli Pariser mentions in his talk is exactly what we did try to build in our product and are even trying to do so today. We pick up programs that people have selected and we then pass on content based on the selections.

Quality has new meaning – it is shit

Project Manager: I was just checking on the defect count and noticed we have 24 open P1 and P2 in system. How are we are going to go live tomorrow. What just happened?

QA Manager 1: Nothing, it is just that my team currently does not have any work for Release 2. They had some time on their hands and hence pro-actively they started to test in R1 and logged these defects.

Project Manager 1: so what are you going to do?

QA Manager 1: Nothing, these are not R1 defects. Testing is closed. We wrapped that last week and all these have tobe logged in R2. These are not R1 defects.

Noah: Development Environment

To kick it off, I have attached the tools that I am going to use in the development environment. This is not an exhaustive list, and I may add more things to it as I go about development.