fine print ] source code

Q1: “Here is 95% of the logic” — In what contexts is such a documentation considered complete? Answered at the end.

When we programmers read source code and document the “business logic” implemented thereby, we are sometimes tempted to write “My write-up captures the bulk of the business logic. I have omitted minor details, but they are edge cases. At this stage we don’t need to worry about them”. I then hope I have not glossed over important details. I hope the omitted details are just fine prints. I was proven wrong time and again.

Sound byte: source code is all details, nothing but details.

Sound byte: Everything in source code is important detail until proven otherwise. Except the obvious redundant code, the “proof” usually takes endless effort, so in reality, Everything in source code is important detail.

The “business logic” we are trying to capture actually consists of not only features and functionalities, but functional fragments i.e. the details.

When we examine source code, a visible chunk of code with explicit function names, variable names, or explicit comments are hard to miss. Those are the “easy parts”, but what about those tiny functional fragments …

  • Perhaps a short condition buried in a complicated if/while conditional
  • Perhaps a seemingly useless catch block among many catches.
  • Perhaps a break/continue statement that seems to serve no purpose
  • Perhaps an intentional switch-case fall-through
  • Perhaps a seemingly unnecessary sanity check? I tend to throw in lots of them
  • Perhaps some corner case error handling module that look completely redundant and forgettable, esp. compared to other error handlers.
  • Perhaps a variable initialization “soon” before an assignment
  • Perhaps a missing curly brace after a for-loop header

( How about the equal sign in “>=” … Well, that’s actually a highly visible fragment, because we programmers have trained vision to spot that “=” buried therein. )

Let me stress again. The visibility, code size … of a functional fragment is not indication of its relative importance. The low-visibility, physically small functional fragments can be equally important as a more visible functional fragment.

To the computer, all of these functional fragments are equally significant. Each could have impact on a production request or real user.

Out of 900 such “functional fragments”, which ones deal with purely theoretical scenarios that would never arise (eg extraneous data) .. we really don’t know without analyzing tons of production data. One minor functional fragment might get activated by a real production data item. So the code gets executed unexpectedly, usually with immediate effect, but sometimes invisibly, because its effect is concealed by subsequent code.

I would say there are no fine-prints in executable source code. Conversely, every part of executable source code is fine print, including the most visible if/else. Every executable code has a real impact, unless we use real production data to prove otherwise.

A1: good enough if you have analyzed enough production data to know that every omitted functional fragment is truly unimportant.

job hopper: more common@WestCoast

I first noticed that west coast employers didn’t care about my job-hopper profile. Then I saw more evidence

long term planning can be demoralizing

My father often tells me I plan ahead too much…

Q: where will I be, what job will I have 5 years from now?

Such questions can be demoralizing and sometimes can dampen a precious spirit of optimism. I sometimes perform better by focusing on here and now.

I think the reality may be quite bland and uninspiring — same job, with declining income, not much “offensive” to mount …

software dev is a 10x profession

In software projects, one lead developer can replace 10 mediocre developers. Many successful products/solutions/tools are the elegant creations of single alpha geeks.

Look at building architects. One key person to control and influence most of the key areas of a construction project, involving hundreds of workers.

Look at car designers, phone designers.

Now contrast restaurant managers. A good manager can’t replace 10 average employees.

Also contrast accountants. No 10x individuals.

Also contrast teachers.

West Coast^WallSt techies #per HenryWu

Henry Wu felt

* west coast techies have clearly higher calibre.

* Wall St is more busy. I guess he means higher workload, faster pace, more quick-n-dirty and lower quality.

* Very few older guys on the west coast. There’s probably implicit age discrimination that’s hard to prove.

* Perm roles pay higher on the West coast. However, his sample may be different from David Leak’s

value-creation sectors – turn tech2highest profit

Notes on Raymond Teo discussion:  west coast shops … creating big value through high user base, high data, …..innovation is high risk — “risk premium”. In contrast, Singapore IT projects have a fixed “value” i.e. the project budget. ($1m is quite big.) Directly impacts IT salary.

Those “upstream” sectors often needs a smaller number of elite techies.The “upstream” don’t really exist in Singapore. Therefore, only a small elite of  techies in Singapore would end up in the financial IT domain. The vast majority of techies live in a totally different world and earn S$60k (up to $100k) a year as non-managers.

As I stated elsewhere, an mediocre techie easily earn a Wall St salary on Wall St, but the same guy would earn $60k in Singapore.
—–
Database/OperatingSys vendors enjoy highest margins (in silicon Valley) but no all Oracle clients get the same ROI buying oracle. Let’s compare the major client-industries that are using technologies. In which sectors does technology create the most profit? Note consumers are the largest user population of technology, but consumers don’t make profit and are not an “industry”, and (crucially) won’t pay us a salary. Our focus here is the major commercial sectors/industries using technology to make profit.

Telecom equipment makers make heavy use of technology and have good margin. Like the DB/OS creators, a small number of elite engineers create industry standards…. Anyway, here are a few sectors.

#1a) HFT or algo trading, either sell side or buy side
1a) other trading engines
2) risk engine, but is the calc really useful, relevant and accurate to be reliable?
2) settlement system can be just as critical and valuable to an i-bank

1b) search engine?
1b) facebook, linkedin, Amazon …

1c) DB/OS/language, as described above, is not a client industry, but DB/OS profit margin is higher than all other domains.
?) Atlassian

4) Telecom equipment maker, as described above
5) commercial banking, corporate/retail banking, insurance. Lower margin than trading, but higher than non-financial service industries. ecommerce like amazon, ebay…? I feel thousands of online services offer useful services but have low margin. B2B better than B2C.

#eor

telecom operators? I know a lot of operators (US or S’pore) don’t pay very high, partly because technology is at equipment makers. health care? logistics? no no no

Fwd: what tech skills are in demand OUTside WallSt@@

Roland,

How is it going? I believe what you wrote. JQuery is purely browser-side but I'm short (i.e. biased against) browser technology. I have chosen to move away from it, so I am seeing all the reasons to support my short position …

For trading systems
* most biz logic is on some kind of server side daemon, i.e. no web server
* the dominant user interface is not browser but a desktop GUI in c#, swing or something older
* there are often some reporting tool. I think they are often but not always browser based.
* In addition, there are some web interfaces that expose in ReadWrite mode the data residing on the server-side.

For risk and backend systems
* i feel the UI tends to be browser, and server side would include a web server.
* the business logic is usually on the server side. Sometimes it's a batch job. Sometimes message driven in real time.

For other financial/banking apps, I'm not sure, but web technology is used more for sure.

How about the GS private wealth systems? Which category? I would put it under the “other financial” category. It has a lot of database-centric software modules, and there's also a lot of online service modules.

Outside finance, I feel web technology is prevalent, mainstream, dominant, often the default choice for a given requirement. Financial technology is a niche. I said the same thing in my 2010 blog http://bigblog.tanbin.com/2010/06/web-skillset-to-keep-our-head-above.html.  If we want to stay close to the mainstream and be employable across the tech world, then invest in web skillset.

—- your wrote —
However even with financial sectors, there seems to a growing need for front end technologies.  JQuery seems to be very hot.

a small example of negative projection

I learnt long ago that if you do something unusual and you want to gauge people’s reaction, you need to assume everyone around you is lazy, selfish, insecure, unforgiving, fearful, over-protective of personal image… Here’s one example.

Suppose boss gives you a task, and you suggest another team member as a better candidate for the task. This can easily invite criticism (from everyone) like “avoiding work”, “pushback”, or “acting like a boss”.

upstream, knowledge-intensive, high-margin sectors for S’pore

Upstream/strategic, knowledge-intensive, high-margin, high-barrier sectors for Singapore

Singapore is traditionally not a high-tech economy…. To compete, Singapore must seek greener pastures and keep a steady foothold therein. This is what every advanced economy does.

Role models? Switzerland, Hongkong, Taiwan, Silicon Valley, Boston

Entry barriers due to large capital, specialized know-how, talent shortage… Singapore EDB likes a sector with such barriers.

RnD – upstream, knowledge-intensive and entry barrier.

— Now the sectors —
$ finance — #1 most special (“sacred”) sector. One of the pillars of the economy but finance is first among equals [1]. Unlike other pillars, finance is part of the life support of this nation. Singapore gov needs long term strategies to protect (its currency and) financial health, even survival, of the nation. It grows a deep foreign reserve and invests it long term.

Not sure if finance is the most high-margin sector. Commercial banking is lower margin; AssetMgmt, security trading and investment banking create few jobs.

[1] if you shortlist the pillar industries of { oil, logistics}, where Singapore competes successfully on the global arena.

$ oil — perhaps the #2 sacred sector.
$ medical
($ life science? not sure what this includes)
$ electronics
$$ semiconductor fabrication – at the higher end of electronic sector
$$ IC design, esp. microprocessor design – still higher margin

$ telecom equipment and telecom operator — 2 big sectors by revenue
$ enterprise IT solutions, including software production and distribution
$ consumer IT product creation. Not a big sector, but look at Creative Lab
$ aviation — at the higher end of the logistic sector. Servicing, component design, research, airport ..
$ higher education and training

————
Now a small sample of the opposite list. Many traditional sectors don’t meet all the criteria in the title but do support a lot of jobs for Singaporeans —
– logistics?? Singapore’s traditional bread-and–butter economic contributor (commerce is another), but margin is deteriorating.
— distribution, warehousing
– commerce
— traditional retail – i.e. consumer shopping
– construction
– tourism and hospitality, casino
– entertainment – online/electronic gaming, music and film
– marketing and advertising, media, publishing, exhibition, conferencing

Many of these above sectors are domestic. They don’t directly contribute to the Singapore Team on the international front — contrast electronics, aviation, medical, tourism… Every advanced economy must show competitiveness and high value-add on a number of major global markets.

[11] fwd: chicken head vs phoenix tail

JL,

My 2 cents worth as a fellow software programmer…

I feel you have potential as a lead developer or even chief architect in a team, but I don’t know how large (by headcount) a team. I myself don’t have enough political sensitivity or influencing power to operate at the top technical echelon or a large company (like Intuit), so I only aim at the team lead or better still, lead developer level. (I feel I have the perception to see through confusing/subtle technical issues though.) It’s important to have a specific self-assessment as to how high you feel you can rise, so my suggestion #1 is to think hard about “how high” and in what type of company (big/small, start-up, product vendor, RnD…).

Some things we can do at age 55; other things we can’t (meaning unlikely) do after we pass 40. For example, switching from team lead to a director is doable at an older age. Mastering (beyond the basics) java/c# on large enterprise projects takes years and can be hard when we are old — very few people at that age accept a junior java dev role; most team members are in their 20’s; interviewers may not like the idea… My suggestion #2 is to list out what kind of opportunities will disappear in 2 years.

Personally, I always emphasize Accumulation. These 2 years of working should build on my previous 10 years, and make me a more valuable contributor. Random jumps won’t accumulate, as a rolling stone won’t gather moss. It’s rare for a big company to need skill in both java and php. If my long term specialization is java, then 2 years in php is not effective accumulation. My Suggestion #3 is to avoid dispersion of energy or “spreading yourself too thin”. A questionable exception — If someone is already expert in win32 programming (for example), then she might want to branch out to database tuning or whatever, because of “diminishing return”.

I think all my suggestions so far are rooted in a long term career vision. However, software guys often witness/experience too many destructive changes to have a vision. If you aren’t sure about long term, then perhaps play it safe. Go for more money, better family life, more job security, more mainstream technologies and brand name companies (adding credibility to resume). These choices are less likely to be a waste of time.

Let’s face it, thanks to destructive changes or whatever, most of our past years are a waste of time. (If you remember thermodynamics) We are particles in hot air, getting knocked left and right. The trick is how to reduce loss of energy and accumulate momentum.

I feel you have always wanted to get into java in a big shop. In that case this is a rare opportunity.

y c++ dominates telecom industry

According to a friend in AT&T…

Call center runs on PBX ( a special hardware machine with embedded
software: http://en.wikipedia.org/wiki/Private_branch_exchange ) and
control server on UNIX/WINDOW machines as well. C++ is used often in
telecomm because:
(1)  there is no JAVA at that time. 🙂
(2) legacy systems are C/C++
(3) people thought C++ is faster high throughput  than Java
(4) special hardwares only have C/C++ complier
(5) old fashion guys only know C/C++

But java is also finding its way into telcom.
(http://www.javaworld.com/javaworld/jw-07-1996/jw-07-telecom-lawton.html).
I saw a lot of applications in Bell Labs and AT&T Labs are built by
Java right now.

u owe a bank$10k..your problem;u own them$1m…bank’s problem

Case 1a) If you owe a bank $10k, it’s your problem; but if you own them $1m … bank’s problem.

Case 1b) If a small financial institution fails, it’s their own problem; but if a big one fails, it’s government’s problem. Look at Lehman.

Case 2) Suppose you interview 10 IT contractors (perm even worse) and hire one. If she proves clearly unfit in a month, it’s the consultant’s problem (losing job); but if it’s after 3 months, it’s employer’s problem. To some extent, employer invests in each new hire, in terms of training.

After 3 years (GS experience), when employer has milked the cow enough, they don’t mind letting her go except the package. They may create an opportunity to “lose” her.

Case 3) if in the first rollout Informatica (or any software vendor) can’t meet a customer’s requirement, it’s the vendor’s headache; but if it shows imperfections a year after it goes live, that’s the customer’s headache. Customer has invested too much into this software product.

value-add by software application across industries

End-user applications (not infrastructure) can be a catalyst and enabler in many fields, but which fields let it unleash the most energy? You can measure the ratio of profit generated and man-day cost. Roughly ranked in this ratio —

#1 security trading
** low-latency — indispensible
** In much of FICC, business can usually function using phone and spreadsheet
#2 accounting and ERP
(DB, OS are considered infrastructure — not usable as is; need applications on top of them.)
#3 telecom
** billing etc
** voip
* logistics, warehousing
* gaming
* online gamble
* computer animation
* electronic component testing in Chartered
* e-government
* tax
* hospital information system
* porn sites – consumers pay
* travel site, amazon, 1800flowers, diapers.com
* ebay
* online and mobile payment
* antivirus
* spreadsheets, word processors

Many popular applications are –> “innovative software applications looking for paying customers” <– because consumers want it free.
* search engine
* web mail — hopelessly free
* zed
* knowledge portal — NIE
* online learning
* newspapers online
* cnet
* facebook, twitter

career planning – next 5Y c2010

update… I feel if last job is a small no-name company (without a much higher salary), then it would affect my “image” for next job search.

See also post in 610610 http://tigertanbin610610.blogspot.com/2013/12/strategic-directions-2014.html
———–
Hi,

Over the next 5 years, though i want to stay in a big bank for many years, circumstances might force me to change job every 1-2 years. Aiming to grow stronger in 3 areas.

Brank) leadership job title in big banks — a door opener and a little halo. When job market declines, employers have too many candidates, they prefer known brands.

T) keep my technical skills relevant — I realize every time I change job, technical skill requirement is always (at least one of) the biggest factor. A lot of tech interviews and quizzes are non-trivial[1]. If we stop doing hands-on work with current technology, we will weaken and become obsolete.

F) mainstream financial domain knowledge esp. security trading. This would open up a lot of high-worth job opportunities. They are not open to me now due to my limited mainstream financial experience. Maybe i
don’t need such a job — i can read up and pretend to have, say, risk analytic experience?

For my next (2? 3?) job searches in the next 5 years, I’m unlikely to apply to PM or business analyst roles. Technical is my strength.

[1] Rarely do i get an easy tech interview on wall street.

emulate join – conflict with Yang

* U don’t like jobs without challenge!
* This job keeps you overclocked.
* adversities will grow you stronger.
* Positive attitude is not easy but will protect you, strengthen you, grow you, ..
* Such design discussions are normal and healthy
* You now see proof that other people (experienced app managers) do see values in the other design — unit of work, multi-threaded,
rerunnable, why something didn’t pass, more detailed logging …
* Take it as a challenge.
* more scalable, since u can easily add another app server, but not another database server.
* avoid locking up AM table for x minutes, and blocking out other spid. However, any time a query runs slowly, you are in the same
situation.
* less load on db cpu
* java classes are reusable in future projects.

* I fully agree — the more flexibility and control required, the more Java shines. There are situations when you want to emulate
the SQL join.
** java design supports more testing, more asserts
** if you want to report on invalid cusips absent from Product table, then you need another query, whereas row-by-row handles it
better.
** i agree if u want to log why a lot is skipped due to funding date, join must not mention that funding date condition. java is
more flexible
** to support peg or AAG, you may need a table other than Lot. u may need another query. this might be easier to handle in java.
** if u emulate the join you can force a join order and force an index
** I did want to put SIPayouts ident into Lot table. Hard with bulk insert.
** more choke points possible if you process row by row. Choke points are good for control.
** rerun — if u want intelligent rerun, then row-by-row offers more possibilities

How that S’pore HR portal failed #letter to friend

Thanks for your 3 reasons. They sound very similar to the undoings of many other dotbombs of the era.

I feel funding often follows sales “results”. Investors (if you had them) are business people — business people look at results.

As to customization, I am no expert but would still put forward my 2 cents — many successful ERP/CRM packages didn’t initially offer a lot of customizability but still attracted enough customers.

I studied Mambo and sugarCRM (all claim to be customizable) in some details, as a developer and not a businessman. I think they are modular, extensible, plugin-friendly, with many skins, with hundreds of configurable parameters, but still show rigidity as soon as you try to get it to work “your way”. My experience with sugarCRM is, if I try 10 potential customers, at most 1 can manage to get it to work “his way”. Of course, the success rate could improve if I figure out more ways to be creative with sugarCRM. (drawing a subway map with spreadsheet?)

I think the key with this customization challenge is finding a special type of customers who don’t ask for customizations. I think you know what I mean. Each HR software was initially designed for a specific subset of companies. Because it’s designed for them, they don’t need customization. The next bigger circle of customers would need some but hopefully minimal customization.

“With our laser equipped, rechargable, transparent, odorless mouse trap, what homes should we target?”

On 10/28/07, Raja wrote:
>
> Hi,
>
> The company did not survive for 3 reasons
>
> 1. We were late to market. Not enough sales with all the competition.
> 2. Each of the customers wanted a lot of customisation to the base product –
> the technology and the framework we had at that time was not agile enough to
> adopt. We are talking about the early J2EE days 🙂
> 3. There were some funding issues also.

skillist^specialize^ accu^churn^ 10yDirection ^domainBet

  • Skillist — the leaf-level tech skills. This label is most relevant on old posts without label.
  • 5y_domainBet — helps me choose which industry sector to invest my time and accumulate.
    • Not necessarily a list.
    • 5Y horizon
  • 10y_dir — longer broader view
  • specialize — I’m a specialist type of professional, not a generalist or manager. These posts help me position myself, not necessarily restricting to a particular domain.
  • t_accu — less specific than “specialize”, but more specific than “t_churn”. Accu is increasingly a holy grail.
  • t_churn — has a slightly different and broader connotation from accu.
  • t_skillist and t_feature tags rarely but could be on one post