Friday, December 27, 2013

Self Programmable Applications/Systems

Taking clues from teaching programming for kids (Scratch, App Inventor, Alice, Blockly) and domain specific languages (DSLs), I started thinking about what is a Self Programmable Application/System. In commercial world or in an enterprise, a Self Programmable Application is not a general purpose application but something designed for a specific business domain and is meant for power users who want to program it themselves without developer's involvement. 

In my view, following are some of the characteristics:
  • You program to be programmed by user
  • Very domain specific to provide common blocks with well defined connectors
  • Visual composition of program by user
  • Being able to configure blocks using visual tools
  • We are talking about high level composition of function blocks not low level programming
  • Using DSLs (common high level programming language like Python) or rules for customization
This concept is not new since we can leverage work done from the following areas 

  • Visual Programming Language
  • Programming With Blocks
  • Domain Specific Language
  • Generative Programming
  • Meta Programming
  • Function Program Blocks in PLCs (Programmable Logic Controller)
  • Workflow/Business Process Model

It should be noted that it takes more time and money to build Self Programmable Applications and they will be cost effective only when we have common set of blocks/components that need to configured in innumerable combinations with minimal customization.

In finance, I can think of some areas where Self Programmable Applications will be very useful:

  • Data Transformation or ETL (Market/Reference Data from different vendors, systems)
  • Pricing

Wednesday, December 25, 2013

Division between Business and Technology - Is It Still Relevant?

After working in financial industry in different companies, I started to doubt the distinct split between business and technology teams in medium to large size organizations. 

With the onslaught of outsourcing and offshoring, lot of organizations have separated the roles into different silos (development, business analyst, project management) and have gone to extreme model where they do not want generalists or people playing multiple roles!

Some of the trends that make division irrelevant are:

  • New Finance/Business professionals interested/proficient in technology
  • Technology professionals with finance background (MFE, MBA, CFA, FRM, CAIA, etc.)
  • Millennials (those born between 1980 and 1995) entering workforce 
  • Younger graduates with dual majors (Computer Science, Economics, Finance)
  • Need for Self Service Applications
  • Buy vs Build resulting integration of in-house and vendor products/solutions
  • Agile Development is back in popularity
One of way of looking business to technology (or vice versa) is to think of a spectrum of skills/roles to be played by different individuals in the organization/team. We definitely need people at the both ends of the spectrum playing very specific roles (pure technologist developing frameworks, core components, etc. and pure business/product specialist understanding client/market needs) but I think organizations gain more if they view roles as a spectrum with individuals moving along the spectrum based on the needs of the organization.

Large organizations achieve organize themselves into distinct business and technology organizations all the way from top (CTO, CIO reporting CEO) and realize that it is difficult to innovate and bring products/solutions to market rapidly. They struggle to merge technology and business back into smaller, nimbler and agile teams!


Tuesday, December 10, 2013

Welcome!

Thanks for visiting my blog. I just attended a conference in New York City and one of the speakers (happens to be a CTO) said something like "everyone should start sharing stuff using social media".

That kind of prompted me to open a blog.

"Either write something worth reading or do something worth writing" - Benjamin Franklin

I hope I have something to share with others and hope it is useful!