All posts by Neil Harwani

Interested in movies, music, history, computer science, software, engineering, management and technology

Job change analysis factors – Part 1

Creating a blog out of my discussions with students, friends and colleagues.

Many of my past colleagues, team members and students reach me at times on whether to make the job change or not which is on offer to them. Based on my experience and mistakes, I don’t reply with a YES or NO but rather provide the factors on which they should analyse and decide on their own.

So here are the factors we generally discuss in no particular order of priority:
–Glassdoor ratings and comments especially the negative ones
–Salary and CTC
–Benefits like insurance
–Campus
–Travel time from office to home and back
–Job type: Hybrid / WFH / WFO
–Culture
–Cafeteria
–Travel requirements in the new job
–Manager
–Team
–Growth, learning and other aspirations
–Location
–Investors, Founders and Shareholders
–Job role on offer
–Management
–Bonding and CTC / benefits / job role in current company
–Customers at current and new company
–Opportunity to work in non conflict of interest area part time
–Discussion with your prospective team / manager and some people working in the new organisation
–Profitability, products and services portfolio comparison
–Sustainability and resilience
–LinkedIn Insights

None of the above are in any order of priority and there are no absolutes. We need to find what suits us.

Did I miss any major factor?

Email me: Neil@HarwaniSystems.in

Learnings from M.Tech. Software Systems – Semester 1 – Mid Terms @ BITS Pilani

Learnings from M.Tech. Software Systems – Semester 1 – Mid Terms @ BITS Pilani. Listing down important concepts from Semester 1 for benefit of students elsewhere.

Data Structures & Algorithms Design:

  • Time complexity and its generalization for algorithms
  • Standardization for various types of algorithms to build pseudo code and find time complexity from it
  • Various types of data structures & their standardization / representation for programming

Distributed Computing:

  • Distributed vs. Parallel systems
  • Various architectures for distributed systems
  • Von Neumann vs. Harvard architecture
  • Omega networks
  • Vector vs. scalar clocks and various techniques around it

Databases:

  • Representation of queries and architecture of database layers
  • ERD & EERD
  • Theoretical foundation for databases

Embedded systems:

  • ARM architecture & Micro-controller basics
  • Basics of assembly programming
  • Various tools for the ARM simulation
  • Interrupts, registers, modes and various interfaces for ARM systems

Email me: Neil@HarwaniSystems.in

Liferay best practices – Part 1

Developers and managers both struggle at times to pre-plan usage of best practices in projects causing many problems which are best avoided. Providing below some learnings & best practices on using and working with Liferay – Part 1.

  • Don’t work directly on the Liferay database. Use the groovy script console in CONTROL PANEL or the Liferay User Interface. Use the database at the max as a READ ONLY tool for analysis and debugging – even this is for extreme cases when recommended like for problems in reindexing and such for BackgroundTaskTable or Lock_ as per Help Center articles only. Stick to Liferay APIs (REST or Java / Groovy – based) for right results. Changing anything at database level can have unintended consequences which are best avoided.
  • If you need a cloud offering, instead of deploying Liferay on AWS / GCP / Azure or similar on your own which can be a valid option, also consider and evaluate one of Liferay DXP Self Hosted, Liferay Experience Cloud Self-Managed or Liferay Experience Cloud. They are built on top of GCP with many advanced features pre-baked like CI/CD depending on the version you select. Liferay’s cloud offering decrease many of the efforts of upgrades, infrastructure, security, patches, CI/CD, monitoring and more depending on which option you select.
  • Use as many out of the box features as possible, followed by configuration and lastly customization. There are 100s and 1000s of direct and indirect features for Liferay available on it’s documentation site.
  • Support tickets are for Liferay product issues, reach out to Customer Success for short term engagements up to multi-month configuration, system administration, customization, audits and such areas. Global services is for executing projects, SME engagements to embed a Liferay expert into your team for technical help, team augmentation, custom packages to support upgrades, performance tuning, DevOps/Architecture kickstarts, long- and short-term customization development, etc. on Liferay. Reaching out to the right team maximizes chances of a fast resolution for your request. For support issues, refer this blog: https://liferay.dev/blogs/-/blogs/working-with-liferay-support
  • Maintain a DevOps / DevSecOps / Repository strategy. Use best practices of code merging, quality and more.
  • Maintain a list of customizations, custom APIs (REST) and modules that are deployed.
  • Consider headless if you want extreme performance or a very specific User Interface with a non standard JS library or you want to connect with an external app with Liferay as the engine or want a very high LightHouse score. Even without headless high scores are possible in most areas.
  • Understand LightHouse and PageSpeed Insights score. There are many hidden things which are NOT OBVIOUS – for example mobile performance scores. Consider investing in parallel into an in-house monitoring tool as well.
  • Upgrades need preparation and multiple dry runs. Bad data, orphan data and bad customizations create problems in upgrade. So use Liferay in the optimum way as per documentation.
  • Keep regular watch on End of Life support and premium / extended support phases. Pre-plan your upgrades by at least one+ years.
  • Lift and shift from in-prem to cloud is not a healthy approach using AMIs. Consider setting up Liferay again via backups if you are shifting to AWS/GCP/Azure from in-prem. Otherwise consider Liferay Experience Cloud, migration would still be needed though.
  • Search & database server should be monitored and optimized on routine basis.
  • Search optimization needs to be a regular habit by the Liferay Administrator as the content and documents get updated. Explore concepts like suggestions, boosting, queries, filters, blueprints and more.
  • SSO, Authentication, Authorization, Login and Security need advance planning and design. These topics vary widely from customer to customer.
  • There are many inbuilt apps in areas of collaboration, social, workflow, content, process, documents and more. Explore and use them before doing customizations.
  • Explore Liferay marketplace for technical & functional accelerators / solutions before investing in developing from scratch.
  • Maintain documentation for your architecture, design, customizations, testing, security, code quality and other areas.
  • Understand and study portal & system properties, they have many settings which can help in managing various scenarios directly by configuration only.
  • Explore Liferay University and trainings on it.
  • Clustered environments are possible in Liferay and consider planning for them right during your architecture, design phase at the start of project rather than later.
  • Consider usage of Advanced or S3 filestore, Clustering, Headless, Liferay DevStudio, Docker images of Liferay, Virtual instances and similar advanced concepts as need be from early in the project.
  • Understand Liferay architecture, tooling and internals like Portlets, OSGi, Liferay DevStudio, Configurations, Control Panel, Gogo Shell, Module projects, Dependencies, Modularity and such.
  • Your important directories and areas in Liferay are: Liferay Home and sub-directories, Filestore / document library – data folder, Custom modules, Configuration files in Liferay Home sub/directories, Search server, Control Panel, Database, Other peripheral configuration areas like load balancer, application server, networking, clustered environments and such.
  • Learn to use the Liferay forums, Liferay Blogs, Liferay GitHub, Liferay Help Center, Liferay Community site, Customer & Partner portals of Liferay well. Lot of useful information is available there.
  • There are in-built areas in the same integrated DXP installation from 7.4 onwards for Digital experience, Portal, Commerce with Analytics. Consider using them from DXP platform before doing customizations for features that are available already.
  • Explore concepts like debug patch, logging per module and overall logging in Liferay.
  • Reach out to community slack channel which can be a great way to further connect with Liferay resources.
  • Keep your portal & components updated with relevant patches & upgrades as per advisory from Liferay.
  • Refer Liferay resources page with case studies & whitepapers. It has useful information on cloud migration, compatibility matrix, benchmarking, what customers are doing with Liferay and more.

References:

  • https://help.liferay.com/hc/en-us
  • https://liferay.dev/
  • https://learn.liferay.com/dxp/latest/en/liferay-internals.html
  • https://learn.liferay.com/dxp/latest/en/index.html
  • https://help.liferay.com/hc/en-us/categories/5843406636941
  • https://marketplace.liferay.com/
  • https://www.liferay.com/liferay-experience-cloud
  • https://learn.liferay.com/dxp-cloud/latest/en/index.html
  • https://www.liferay.com/resources/case-studies
  • https://www.liferay.com/resources

Email me: Neil@HarwaniSystems.in

Comparison of Programming Languages C, C++, Java, Python, R, Rust, Scala & C# – Part 1

Part 1 of a series on comparison between programming languages: C, C++, Java, Python, R, Rust, Scala & C# compiled from WIKIPEDIA

C:

  • Invented in 1970s
  • Used widely in operating systems and driver programming
  • Imperative, procedural, compiled and structured with low level access to memory
  • Cross platform capability
  • Has had influence on C++, Java, C# and other languages
  • Concepts: Functions, Data Structures, Input Output, Pointers, Run-Time polymorphism, Recursions, Static data types
  • Limited keywords
  • Directly compiles to machine instructions
  • Static, automatic & dynamic memory allocation possible
  • Runtime problems can happen in memory and other areas
  • No support for object orientation & functional programming

C++:

  • C with classes, extension of C
  • Support for object oriented, generics & functional programming
  • Compiled & low level memory access
  • Systems programming, embedded systems, games, servers and more
  • Standardized by ISO
  • Inherits & builds on top of most of the syntax of C
  • Static, automatic, thread & dynamic memory management
  • Templates with implementation of generics concept is possible
  • Operator overloading
  • Compile time & runtime polymorphism possible
  • Support for lambda expressions
  • Enum data type
  • Core & standard library with multi-threading, regular expressions, smart pointers
  • STL – Standard template library
  • Criticism: Overtly complex

Java:

  • General purpose, high level, object oriented, write once run anywhere
  • Java -> ByteCode -> JVM
  • Automatic memory management & garbage collection
  • Generics, Spring, Functional, JavaEE, Scala, Kotlin and many other projects have come out from Java
  • Mostly used for application programming
  • Used in Android and as a base for many other frameworks & programming langauges

Python:

  • High level, general purpose
  • Focusses on code readability & uses concepts like indentation
  • Automatic memory management
  • Features from structured, object oriented & functional programming
  • Large ecosystem of libraries
  • Used in machine learning, web development and many areas of data science

R:

  • Focussed on statistics & graphics
  • Interpreted, features from procedural & object oriented
  • Large ecosystem of libraries / packages
  • Commercial options available

RUST:

  • Focussed on systems programming & being looked as a replacement for C & C++ by many
  • Major focus on type safety, concurrency and memory safety
  • Only valid references allowed for memory except few other scenarios
  • Object lifecycle & variable scope checking at compile time itself unlike many languages that do this at runtime
  • Strongly and statically typed
  • Generics
  • Ownership & lifetimes concept introduced over objects
  • Features of functional programming

Scala:

  • Functional & object oriented features
  • Many functional features are implemented: No difference between statement & expressions, Lazy evaluation, Currying and Type inference
  • Strong & statically typed
  • Options to compile & run on JVM or as JavaScript or as native code

C#:

  • Multi paradigm
  • Static & strong typing
  • Functional, generic, object & component oriented features
  • Common Language Infrastructure standard driven which helps to get Common Intermediate Language for runtime
  • Metaprogramming concept is used
  • Garbage collector & detailed memory management techniques exist

References:

  • https://en.wikipedia.org/wiki/Comparison_of_programming_languages
  • https://en.wikipedia.org/wiki/C_(programming_language)
  • https://en.wikipedia.org/wiki/C%2B%2B
  • https://en.wikipedia.org/wiki/Java_(programming_language)
  • https://en.wikipedia.org/wiki/Python_(programming_language)
  • https://en.wikipedia.org/wiki/R_(programming_language)
  • https://en.wikipedia.org/wiki/Rust_(programming_language)
  • https://en.wikipedia.org/wiki/Scala_(programming_language)
  • https://en.wikipedia.org/wiki/C_Sharp_(programming_language)

Email me at Neil@HarwaniSystems.in

Notes on Liferay search optimization – Part 1

Notes on Liferay search optimization – Part 1.

There are two parts to search optimization in Liferay. One is the internal search and other is the SEO / Digital Marketing for content. Below, I am sharing concepts and keywords to explore for both areas.

Liferay internal search:

  • Search BluePrints
  • Search Insights
  • Custom Indexers
  • Tags & Categories
  • ReIndexing
  • Facets
  • Suggestions
  • Boosting
  • Sorting
  • Low level search
  • Search Options
  • Similar Results
  • Queries & Filters
  • Google Search console / Bing search console / Google Analytics analysis and feedback into internal search

Liferay SEO:

  • Open Graph
  • Friendly URLs
  • SiteMap
  • Robots
  • Meta Tags
  • LightHouse / PageSpeed Insights score
  • Google Analytics
  • PIWIK
  • Headless

References:

  • https://learn.liferay.com/dxp/latest/en/using-search/liferay-enterprise-search/search-experiences/creating-and-managing-search-blueprints.html
  • https://learn.liferay.com/dxp/latest/en/using-search/getting-started/search-overview.html
  • https://learn.liferay.com/dxp/latest/en/using-search/getting-started/searching-for-content.html
  • https://help.liferay.com/hc/en-us/articles/360029046411-Building-Search-Queries-and-Filters
  • https://learn.liferay.com/dxp/latest/en/site-building/site-settings/configuring-open-graph.html
  • https://learn.liferay.com/dxp/latest/en/site-building/site-settings/adding-a-new-analytics-service.html
  • https://analytics.google.com/analytics/web/
  • https://marketingplatform.google.com/about/analytics/
  • https://piwik.pro/
  • https://developer.chrome.com/docs/lighthouse/overview/
  • https://pagespeed.web.dev/

Email me at Neil@HarwaniSystems.in

Cyber Security Keywords & Concepts – Part 1

Here is a list of keywords & concepts in Cyber Security that technology professionals should be aware of. This is part 1 of the series.

  • CSP
  • XSS
  • ISO 27001
  • OWASP
  • Encoding / decoding
  • Encryption and it’s types
  • CSRF
  • CORS
  • Hashing
  • Authentication
  • Authorization
  • IAM
  • SSO
  • SAML
  • OAuth
  • Tokens
  • HTTPS / SSL
  • DOS / DDOS
  • Backdoor
  • Malware
  • Secure coding
  • Threats, Vulnerabilities, Controls & Mitigation
  • VAPT
  • Social Engineering
  • Spoofing
  • Proxy servers
  • Phishing
  • SQL injection
  • Buffer overflow
  • Viruses, Worms, Keyloggers, Spywares
  • Identity theft
  • RootKits
  • Zero Day
  • VPN / Firewall / IPS / UTM
  • Digital Certificates
  • Anti-Virus

References:

  • https://en.wikipedia.org/wiki/Cybersecurity_information_technology_list
  • https://en.wikipedia.org/wiki/Computer_security
  • https://en.wikipedia.org/wiki/List_of_computer_security_certifications

Java ecosystem observations – Part 1

Below are some notes on Java which help us to decipher how it has evolved over time since 1995. This is part 1 of the series. This acts as a mini caselet to understand how a successful ecosystem related to an application programming language has evolved over decades.

  • Origins: Bytecode, compile once, run anywhere concept via Java Virtual Machine – 1995
  • Object oriented origins, largely focussed on application programming
  • Steadily in one of the top choices for programming since origin
  • Liberal license & forks under TCK/JCK & OpenJava along with paid, enterprise options of Oracle / IBM and more as of 2022
  • Large open standards, open collaboration & open source influence since the beginning
  • Automatic memory management
  • Top languages built on top of JVM: Java, Kotlin, Groovy, Scala, Clojure as of 2022
  • Associated top products, frameworks, libraries and platforms built on top of Java: Spring, Activiti, jBPM, Drools, Log4j, Kafka, Tomcat, Spark, ElasticSearch and more as of 2022
  • Multi-threaded
  • Platform independent & Just in time
  • Influenced by C/C++
  • Over time, both Java Spring & Jakarta EE have evolved for enterprise Java
  • Has developed coding standards
  • Has a well defined specification ecosystem
  • Spring ecosystem has support for microservices, reactive programming, cloud, webapps, serverless, events, batch, security and more
  • JNI is an option to run native code
  • Thousands of tutorials, blogs, websites, news, videos & technology articles cover Java on routine basis
  • Functional programming concepts recently introduced

References:

  • https://en.wikipedia.org/wiki/Java_(programming_language)
  • https://en.wikipedia.org/wiki/List_of_JVM_languages
  • https://en.wikipedia.org/wiki/List_of_Java_frameworks
  • https://en.wikipedia.org/wiki/Spring_Framework
  • https://docs.oracle.com/en/java/
  • https://openjdk.org/
  • https://google.github.io/styleguide/javaguide.html
  • https://docs.oracle.com/javase/specs/
  • https://cr.openjdk.java.net/~iris/se/11/latestSpec/java-se-11-jls-draft-diffs.pdf
  • https://en.wikipedia.org/wiki/Java_Native_Interface
  • https://www.baeldung.com/jni
  • https://www.baeldung.com/java-functional-programming
  • https://jakarta.ee/

Management outcomes for departmental analytics – Part 1

What could be the outcomes for various departments in an organization in terms of using analytics? Here is part 1 for the same.

Background and context: Most organizations struggle at some point of time in their lifecycle for management outcomes and as per the latest trends try to use analytics to assist in better decision making. With more than 30-50 areas for algorithms / frameworks and knowledge in the quantitative and mathematics fields, where should the focus be? Based on my observations and learnings, focus could be on below areas in terms of outcomes:

Human Resources:

  • Employee satisfaction
  • Career advancement
  • Skills & Knowledge analysis
  • Compensation & benefits analysis
  • Leadership pipeline analysis
  • Scalability analysis
  • Cost analysis

Finance:

  • Sustainability in terms of profitability & continued revenue
  • Local community engagement
  • Investments for sustainability
  • Product & services evolution & sustainability

Product team:

  • Customer satisfaction scores
  • Revenue trends
  • Features analysis in terms of usability & adoption
  • Product support & customer success scores

Marketing:

  • Customer retention
  • Net new customer addition
  • Brand awareness & recall
  • Cost analysis for digital marketing & customer acquisition

Operations:

  • Customer satisfaction scores
  • Turn around and closure time for requests
  • Problem analysis & cause finding

Email me: Neil@HarwaniSystems.in

eCommerce evolution in India – Part 1

This caselet tries to summarize the evolution of eCommerce in India in the last two decades and lists the phases as observed.

Summary from Wikipedia article here:

  • Internet user base of 600+ Million in India
  • Rapid growth in eCommerce but eCommerce penetration as a percentage of internet users is low compared to US, China, France and so on
  • Cash on delivery is the preferred mode for more than 70% of users
  • Demand for international products is high
  • Flipkart, Amazon, Snapdeal, JioOnline, Multiple grocery vendors and specialized sellers in electronics, gifts, travel and more are the leading eCommerce entities
  • Open Network for Digital Commerce is under pilot phase in India
  • Online travel booking, apparel, retail, grocery, electronics, mobile, DTH, warehousing, logistics, food delivery, ride hailing, furniture, luxury, home maintenance & services, gifts, fashion are a large component of eCommerce in India
  • COVID-19 created lot of upheaval in the models and sales in eCommerce
  • Evolution into 10-30 minutes delivery, next day delivery and innovative models have seen an uptick in last 3-5 years
  • Large number of investors have put in money into various entities over the last 10-15 years
  • Niche players in automobile, apparel, grocery and similar areas have been coming up
  • String of acquisitions / mergers have happened over the last 10 years especially from large players
  • B2B eCommerce is growing quickly. Players like Bizongo, Udaan, Medikabazaar, Moglix, Ofbusiness and Inframarket are present.
  • Major regulation rules include foreign players not allowed to hold inventory

Phases as observed in the last two decades:

  • Standalone focussed players – early entrants – with less regulation
  • High growth in number of eCommerce players
  • Entry of investors
  • Regulations evolving over time
  • Shift of smaller sellers (many of them) to marketplaces
  • Friction between online & offline sellers
  • Hyper competitive growth with losses to capture market
  • Enablement of financial ecosystem like UPI, RuPAY, QR, JanDhan, Cash on delivery models and so on
  • Evolution of 4G and broadband
  • Specialized and niche sellers
  • IPOs for many specialized players
  • Newer models of sales around delivery, bundling of additional facilities and so on
  • Evolution of local logistics players
  • Consolidation, closures & M&A across the industry
  • Brand building, focus shift to a mature mindset and ecosystem
  • Newer initiatives to standardize eCommerce like ONDC and preparation for 5G

References:

  • https://en.wikipedia.org/wiki/E-commerce_in_India
  • https://en.wikipedia.org/wiki/Open_Network_for_Digital_Commerce
  • https://economictimes.indiatimes.com/tech/tech-bytes/rapid-digitalisation-drives-b2b-ecommerce-during-pandemic/articleshow/88500483.cms
  • Google News

Email me: Neil@HarwaniSystems.in

Culture in Tier 1 cities for ITES

I am starting with mini caselets newsletter (once every month) which is a series of anonymous (real / hypothetical / reality inspired) mini case studies each of maximum 2 pages from my observations of industry happenings – direct / indirect / via news articles / network / friends / problems that people face and such. Intention of each mini caselet is to highlight a set of challenges that are faced both by managers & employees or hypothetically created leading to better leadership and management styles which in turn give better environment for employees or solutions or solution direction.

Think of a situation of an ITES company office in Tier-1 city which is recruiting lot of fresh talent and working on onboarding them to become productive in 2-3 months to deliver good projects.

What can go wrong?

  • Disagreements between two set of managers who manage the same account / customer in the same shared office space of an extended development center each having competing teams
  • Uneven knowledge transition to fresh candidates
  • Silos & lack of functional knowledge for team
  • Managers deciding how the behaviors of employees should be in terms of which interactions they should have and which to avoid based in older management & leadership principles from 80s/90s command and control structures
  • Cultural differences in terms of recruitment geographies of candidates leading to differing work styles – For example, somebody studied and lived in a Tier 2 city in India vs. somebody who studied and lived in Tier 1 city in non India region – both will have differing goals and perspectives
  • Culture of less knowledge sharing and long working hours
  • Struggle for accommodation, food, entertainment, social circle and more with a very limited salary in year 1 in Tier-1 city
  • Disengagement of support functions in terms of how work is done on the ground and them differing to managers for every decision
  • Add to the mix competitive landscape to go onsite, climb the corporate ladder & increase salary quickly
  • All this in the influence of 1.5/2 year retention contracts for fresh candidates when they can’t leave the firm easily

Now to solve this situation simply flip the scenario and fix each point one by one by interventions / trainings / guidance / discussions / role plays / similar techniques and you have a recipe for a better culture, it’s as simple as that.

Email me: Neil@HarwaniSystems.in