Thursday, April 30, 2009

Cloud Computing

I attended a financial services industry forum on Cloud Computing today. This is a very interesting concept.

Since I have no actual work experience in implementing any production cloud computing application, I will list out some very general points.

What is cloud computing?
It varies by whom you talk to. One way for me to look at cloud computing is as a Platform-as-a-Service. It hides all the infrastructure details inside a cloud and let the application team focus on the business logic they need to address. The cloud can be located inside or outside of the company. If you decide to use a public cloud, you can think of outsourcing the infrastructure. Amazon's EC2, using virtualization to support a specific instance of a specific OS is one example of a popular public cloud.

Attractiveness of cloud computing
The capacity needs can be dynamic. If a company needs to run a computational intensive process once in a while, they can "rent" some CPU cycles from the computing farm once a month.

For the public cloud model, each company also needs to review whether a particular service level agreement is acceptable. For example, are you satisfied if you can get a refund of the service fee if a company does not meet its SLA of 99.95% uptime per year, or about 4 hours downtime per year? Can you afford even longer (however unlikely) outage without any direct control in fixing the problem? Will having a different backup cloud as a business continuity plan good enough? Is it justified for you to manage your own infrastructure?

Getting back to basics
We still need to address the same problems we have. What are the business use cases, processes, and data. What functions we should move to the "cloud" and why it will be a more effective solution. We also need to address the typical questions on data transfer throughput, latency, authentication, privacy etc... Having cloud computing framework can give you another tool as a means to an end. The end can be cost saving, reducing operating complexity or load balancing between multiple applications. The due diligence will be, what is the advantages of picking this technology over others.

I will discuss my view on this topic with more specific examples and technical details in a future blog.

Wednesday, April 29, 2009

Hedge Funds and Prime Brokerage

This is a very high level overview of Hedge Funds and Prime Brokerage, with information that you can find on the web.

What is a hedge fund?
A hedge fund can use leverage, trade multiple asset classes, and have short positions. They are usually targeting high net worth individuals and charge both a service fee and a performance fee.

Growth of hedge funds
There are many different measures, but roughly total assets for all hedge funds grew to a peak of around $2 trillion in 2008, from about $0.3 trillion in 2000. For comparison, US GDP is about $14 trillion and TARP at $0.7 trillion.

The biggest hedge funds are huge. The top 10 global hedge funds each have over $10 billion in assets.

Prime Brokerage business model
In the highest level, Prime Brokers help their clients, the hedge funds, in clearing and settlement, consolidated reporting, financing and securities lending. There are other services like capital introduction, technology start up consulting, fund administration etc.

Revenues for Prime Brokers are mainly earned from spreads in long and short balance, transaction fees for clearing, and securities lending. A Prime Broker can also help bring in additional revenues to the company's various trading desks with the understanding of the clients needs.

Technology needs
Technology is an integral part of the Prime Brokerage business.

A Prime Brokerage firm uses web, FTP, FIX, SWIFT, FpML and other standards for client interfaces. It leverages firm wide referential data like pricing, product and account information. It interfaces with front offices, middle offices and back offices for position keeping, pricing and settlement. It works with other firm wide system for risk, compliance and funding. PB technology also provides margin, client risk, accounting, custody and data integration functions. It provides post-execution trade processing and allocations. It interfaces with the firm's general ledger and client sub ledger systems. All of these are done to support the global markets with large daily trading volume. Data snapshots are also needed to generate month-end reports.

It is very critical for a prime broker to provide accurate and timely information to all of their global clients in their local timezone. For example, a London based hedge fund should get the consolidated reports and data feeds for all their positions by local 7am, or 2am EST. A Tokyo based hedge fund will need their data by 7am, or 6pm EST. Different strategies and technical designs can be used to address this business requirement by different Prime Brokers.

In a nutshell, technology projects in PB are done to satisfy any of the following business needs
  • Improve operation efficiency
  • Scalability of systems to maintain SLAs with clients ongoing volume growth
  • Improve business offerings to retain existing clients and win new business
  • Responding to new industry initiative and trends
  • Internal risk measurement and control
  • Support and serving existing clients
Prime Brokerage is an exciting and demanding client driven business.

Tuesday, April 28, 2009

64-bit and multi-core computing

All software needs to be run on hardware. CPU can be 64 bits and multi-core. In order to fully utilize the upgraded hardware, we will need OS support and some knowledge in high level application coding to take advantage of the new hardware.

64-bit computing
32-bit computing is fine if you don't have any specific needs. In my very simplified view, there are 2 main considerations to move to 64-bit computing.
  • Addressable virtual memory address space. This is my #1 reason. If ~2GB is good enough for your application (after subtracting the memory footprint of the OS and VM from 4GB), stay put until there is another reason.
  • If you need bigger storage or can benefits from faster computation of larger 64-bit registries.
Multi-core computing
  • Performance is the most critical consideration here. Given the slow down of CPU clock speed improvement, and machine language processing efficiency, we have to rely on multi-processing or multi-threading to improve performance.
Another important side note, different processors with different architecture will perform differently with the same clock speed. Mainly due to how many cycles it needs to process different instructions

There are a whole new list of concurrency issues that we need to be aware of when we start to do multi-core concurrent processing. This is very different than using time-slicing to achieve
virtual concurrency in single-core processors. If you are interested, look up more on kernel threads, LWP and the (old) green threads.

Monday, April 27, 2009

Application development and team structure

Application development, or software engineering, is a creative activity that happened to require a lot of different technical skills.

Structure of application development team
In a typical project, there will be roles like business analyst, project manager, developer, quality assurance tester, and support engineer, etc. All of these are usually classified as IT job functions. There are additional business job functions associated with typical application development projects. For example, product development, graphic designs and marketing.

Each company or industry tackles this differently. Usually, smaller companies triy to have a person doing more than one function, while bigger companies have different teams for each function.

Most of the time, the structures are standardized within the company or organization and will not vary that much across different projects.

Divide and Conquer?
No matter what role(s) you are playing, understanding the overall structure will help you appreciate what others are doing and let you leverage any help from them.

Different skills and personalites are needed for each function. A business analyst needs to have excellent business domain knowledge, a project manager needs to be very organized, a software developer needs to understand the necessary technologies, a tester needs to be thorough, a support engineer needs to be able to handle pressure and be creative, etc...

But we should remember, bringing in more people also means more interactions and communications. So, it is very critical to make sure the added expertise outweighs the overhead of having multiple people understanding the common background of a project, which is inevitable. Setting up clear responsibilities and accountabilities are also critical.

Personally, I believe that having a person (or team) involved with multiple functions will be more effective overall, mainly due to the fact of having an "end-to-end" responsibility. However, it will be more difficult to find people with all the right skill sets (and willingness) to do multiple functions. It is also much more difficult to scale to larger projects.

From Telecommunication to Banking

Fresh out of college, I joined AT&T. Like a lot of college graduates at that time, I was attracted to the company due to Bell Labs and their invention of UNIX and the C Programming language.

The position that I started with was a System Engineer in the Billing Planning team for Long Distance Services. The main role for this position was analysis and planning.

After about 6 years with the company, an exciting opportunity came up for me to work for Goldman Sachs. The reason I was hired obviously was my UNIX and C++ programming skills.

I ended up spending my next 12 years with the company, acquiring all the business knowledge that I need in the fascinating Prime Brokerage business, servicing hedge fund clients.

Each person's career journey is unique. For me, looking back, every step along the way prepares me for the next challenge and helps me appreciate them more.

AT&T / Lucent Technologies Bell Labs
In order for me to write requirements to introduce new enhanced long distance services, I learned about all the high level network architecture, 4ESS/5ESS network switches, Call Detail Recording message layouts. I did not fully appreciate the work initially. However, this position gave me a unique early career big picture perspective.

I moved on to work on software development for the Digital Cross Connect system. I was excited to work on the Database and concurrent data access using various locking schemes. I then transferred to the Hybrid Fiber Coax system, doing C++ coding, using a real-time OS.

Goldman Sachs
I remember my excitement, with a little bit nervousness when I started with Goldman Sachs. It was nothing close to what I had been doing, including company culture. I settled down quickly and a new opportunity came up. I was asked to work on the client-facing website for Prime Brokerage. It was the early days for the Internet. I studied all the latest technologies - HTTP protocol, CGI, HTML, authentication, PGP encryption and successfully released the first firm wide integrated offering. The new technologies enabled reporting and analytics for our hedge fund clients, many still using dial-up connections to Goldman Sachs.

Fast forward to last few years, I learned about Contract For Differences, Credit Default Swaps and many other financial products, and how we can integrate all these products to the core Prime Brokerage offerings. I was also the first in the organization to lead an offshore India development team in delivering the core offerings.

All of these roles are very different. That's the beauty of it. I used previous experience and mastered more new knowledge along the way. Like a snowball that grows bigger and bigger with much diversified skills inside.

Friday, April 24, 2009

Technology: More revolutions or evolutions?

Let's use 20 years, 1990 to 2010. Give it some thought before you read on. I will focus more on the software side of technology here. My view may not be the one you have.

If you look at the Computer Science curriculum at Universities, fundamental courses like Operating Systems, Programming Languages, Networking, Databases, Software Engineering that were taught in 1990s are still the core offerings now at school.

My main point of this discussion is it is always important for us working in the software industry to have a solid understanding of the fundamentals. They are like a good foundation of building a nice house. It is also good to know that most of our knowledge has a very long shelf life if you believe that software technologies are mostly evolutions. We always learn new technologies to add to our solid foundations.

Nowadays, to improve productivity, there are a lot of high level tools, languages, frameworks that help shield all the glory details. This works perfectly most of the time for day to day tasks. But the fundamentals are always critical when you try to address some specific and difficult problems. I will spend more time in subsequent posts for some important examples in my mind.

Revolutions
  • Internet. By internet, I mean HTTP and HTML. Even with all the latest Web 2.0 advances, we are not replacing HTTP and HTML.
  • Smart Phones/Wireless. They are really highly portable "computers". Who would have imagined 20 years ago of what we can do nowadays on a "portable telephone"?
There are definitely other revolutionary software related technologies, but what I am getting into is that there are not a lot of them, considering the long time frame.

Evolutions
  • Operating Systems. Think about UNIX, from System V at AT&T to open source Linux now. How much fundamental changes are in the Kernel design, and the Shell?
  • Programming Languages. C#, Ruby, Java, are they all similar to C++ by using object oriented concepts.
  • Networking. TCP/IP, ethernet. They are still used for in networking.
  • Databases. Relational technology, how different it is now than past decade?
So when the next new hot technology come to your mind, ask yourself this question. Is this truly a revolution? Or is it just an evolution that can help us solve the same problem better and more effectively?

Hardware is getting so much cheaper and more powerful that it enables all these revolutions and evolutions to happen. In my mind, if microprocessors power remains constant, the software industry will sure need more "revolutions" to make all the progress that we made in past 2 decades. However, this trend is changing in my mind, so concurrency will become much more important in the future to leverage the multi-core processors power. Another future topic.


All of these tie back to my philosophy, using the right technology to innovate a business or solve a problem. Next week, I will touch on some examples on the other 2 areas, business knowledge and management.

I am glad to hear your different viewpoints. Have a good weekend!

Thursday, April 23, 2009

Role of technology in business

Welcome! In this blog, I am going to discuss my own experience about how to use technology effectively as business differentiators. It is obvious that good use of technology can create new business opportunities, improve operation efficiencies, contribute to the bottom line and increase competitive advantage.

I am very fortunate to have the chance to work on many business critical initiatives with talented colleagues and managers. I would like to say thank you to everyone that I have worked with. I have picked up tremendous amount of business domain knowledge and have learned about various project and team management styles also.

So, what are the areas I will touch on?

  • Significance of different technologies. Without good understanding, we cannot effectively evaluate how and when to use them as tools to create business values.
  • Project and team management. How to get things done is obviously critical.
  • Business domain knowledge. Ultimately, the reward of the hard work of a successful software project is to deliver something important and of good value with respect to the time we spend.
  • Something fun about consumer technologies (once in a while!). Recently I am impressed with the iPhone and the Netbook that I purchased. This also shows how quickly technology landscape can change.
Everything I am going to write will be based on my own principles and values. I welcome any comments.

Significance of different technologies
This list will change over time. Every couple of years, new buzzwords come up and old ones fade. I will discuss my views on some of these technologies in the future blogs. Java/J2EE, ASP.NET/C#, CGI, Servlets, Struts, Spring, Ruby on Rails, inversion of control, dependency injection, Web 2.0, AJAX, XHTML, multi-processor architecture, concurrency and thread safety, UNIX family (Solaris/Linux/Mac OS X), POSIX, XML, Sybase performance, database normalization, Object Oriented Programming, modeling tools (UML, ER diagrams), SOA, SaaS, Web Services (SOAP, REST), cloud computing, grid computing, ETL, OLAP, OLTP, data warehouse, NAS, SAN, NFS, ext3, 32-bit versus 64-bit computing. Going on and on, you name them.

Project and team management
How do we fairly and objectively size a software project? How do we motivate the whole team and maximize the moral and productivity? When should we use agile, scrum, extreme programming, and traditional waterfall model? What team structure works best to satisfy different functions of business analysis, project management, application development, quality assurance and code migration, support and customer feedback? What about the concept of technical debt? How to help individual team member grow? Company culture and geographic composition of team are also interesting to understand.

Business domain knowledge
Are we using a technology because it is cool? Remember when everyone wants to use EJB? We need to be able to explain why a particular technology is the best tool to a business problem. Without a deep understanding on what we want to achieve and why we are doing it, we may focus our energy and precious time ineffectively. We can get the best technical expert in tuning the performance of a complex database and queries, but do we need all the data, and can we optimized the amount of data? What is the impact and fallback plan if we do not get the latest pricing for some exotic products versus pricing for some very common stocks? How will portfolio margining help the business? I might also write on industry specific news and their technology implications.

Thank you everyone for taking the time to read my first blog. Please let me know if you have any feedback.

Sincerely,

Timur King