mastered in the open blog — burn=materialistic_ROTI + self_discipline
insightful article: managing tight deadlines is the background
— deadly delay at feature level, without user impact
This is real stressor primarily because there exist team colleagues who can GTD faster on this same task.
For the serious delay, user impact is … exaggerated! This is true across all my projects — user impact doesn’t really matter. In fact, the feature may not be used much whether you deliver it in high or low quality, within or exceeding budget.
— blatant delay at project level when you are architect / team lead
In theory if you promise to delivery some new feature i.e. green field project, then it can be tough to deliver on time. In reality, project time/budget overrun is very common. You only need good explanation.
Users never care that much about any new system cf current production systems. New systems often hit various teething problems and functionally unreliable for months.
OK , Users don’t really care that much, but there’s visible technology budget impact which make the technology MD look bad. MD must look for an “explanation” and may cut headcount as in StirtRisk and RTS-Trep
Whose fault? Many fingers point at you the architect, but often it’s partial fault of the user-facing manager due to immaturity and overconfidence with timeline estimate.
Delay is mostly architect’s fault if another architect can deliver faster but I can’t imagine two architects working on two comparable projects at the same time. Therefore it’s never “mostly architect’s fault”. In reality, management do apply pressure and you suffer, but it’s really for political reason (like sacrificial lamb or scapegoat)
eg: RTS Trep
eg: PWM Special-Investment-management
eg: Post-Saurabh GMDS — multiple delays and scope reductions
I won’t put on “t_gzPain” or t_stress as these factors are not stressors in my career! The opinions below are valid based on “their” personal experiences not my experience. As such, I should NOT overthink about these.
- Daniel Yan of RTS cited the effect of imposed deadline by exchange
- Several IT friends cited the fire-fighting mode
- CSDoctor said in some companies like Huawei, there was an unhealthy culture of long office hours, eroding family time, but i think this is rare nowadays.
2 heaviest work stressors provides a incisive introduction to the same topic.
I tend to believe that “high performance” teams tend to emphasize GTD, intensity (“productivity” and “efficiency”) … remember Macq’s Kevin. He is highly efficient and he feels’ I’m not productive enough even though there’s no one else to compare.
However, my Barcap workload was not so heavy but high-impact 🙂
My conclusion at beginning and end of this analysis — figure-things-out faster than team colleagues is still the primary determinant of stress/respect/stigma.
Which past jobs would allow me to spend more time helping kids with studies?
- #1 Citi — i can finish off personal work in office
- RTS? yes during the quiet weeks. More importantly, I was familiar with the system, possibly more so than my coworkers, so with 70% of effort I could meet the requirements, so I can spend more time helping kids
How about Macq? Hours are short but I often decide to work on weekends. I dare not leave earlier because I feel guilty that I haven’t made enough progress on my projects.
I feel the stress of helping kids with studies would /resonate/ (“conflict” is the wrong word) with the stress of stigma/PIP, and create a highly
amplified response, bigger than each stressor alone could produce. I would feel like a candle burning from both ends .. insufficient energy and would be forced to consider tough sacrifices.
I think Mvea team would be much better as Josh is very tolerant and forgiving.
Commute — how important is it? I now feel commute is insignificant compared to coworker benchmarking or PIP
My (growing) Passive income does reduce cash flow pressure… but it has no effect so far on my work GTD pressure.
Q: Anything more effective more practical?
- take more frequent unpaid leaves, to exercise, blog or visit family
- expensive gym membership
How about a lower salary job (key: low caliber team)? No I still want some challenge some engagement, some uphill, some positive stress.
In 2017 I wrote to Gerald Robinson that spare time depletion would become one of the key challenges/pains of my forthcoming/upcoming adjustments.
For many (probably most) of my peers, if they don’t feel the drive to keep learning in their spare time, the resource depletion doesn’t feel so harmful, hazardous, stressful.. Beside this “learning”, I also have a need for quiet time for reflection.
— commute — Bayonne commute is tolerable only when I have plenty of spare time as “slack resource”.
— Parenting — (esp. my son) became a huge commitment and strain on my slack resources.
— Additional paid annual leave is supposed to be a slack resource but I think it doesn’t reduce the pressure to perform
… but I did spend these hours (weekends + evenings) in office to learn localSys, provided I’m engaged, in the mood.
Need to think harder about how to turn these
large quantities of high-quality spare resource into stress-relief. These resources feel like untapped oil reserve.
Real deciding factor is coworker benchmark (not PIP/stigma). Are there managers tolerant of team members below the benchmark? Josh, Srini of Citi-muni..? Even in a less demanding company, pressure can be high.
- — Here are some jobs paying 150k with light GTD-load. Usually don’t attract young bright guys.
- employer: slower ibanks like Citi, UBS
- employer: some commercial banks like OC, BONY
- employer: large traditional buy-side like AIG, Vanguard
- employer: 3rd type financial firms like exchanges/ECNs, data vendors (Reuters?), financial product vendors,
- employer: non-finance like telcos
- employer: startups but they tend to use new technologies
- less glamorous — like mkt data, back office
- greenfield codebase with short history — like OC, StirtRisk
- smaller codebase — like RTS
- older workforce — like RTS
- older technologies — like SQL, C, socket
(I want to keep this blog in recrec, not tanbinvest. I want to be brief yet incisive.)
See 3 ffree scenarios: cashflow figures. What capabilities enabled me to achieved my current Comfortable Economic profile?
- — top 3
- by earning SGP citizenships
- by developing my own investment strategies, via trial-n-error
- by staying healthy
- — the obvious
- by high saving rate thanks to salary + low burn rate — efficiency inspired by SG gov
- by consistent body-building with in-demand skills -> job security. I think rather few of my peers have this level of job security. Most of them work in one company for years. They may be lucky when they need a new job, but they don’t have my inner confidence and level of control on that “luck”. Look at Y.W.Chen. He only developed that confidence/control after he changed job a few times.
When I say “Comfortable” I don’t mean “above-peers”, and not complete financial freedom, but rather …
easily affordable lifestyle without the modern-day pressure to work hard and make a living. In my life there are still too many pressures to cope with, but I don’t need to work so damn hard trying to earn enough to make ends meet.
A higher salary or promotion is “extremely desirable” but not needed. I’m satisfied with what I have now.
I can basically retire comfortably.
- best examples: temporary sickness; quarrel; deadlines; something broken
- relocation stress
- —-poor examples
- investment foes
medium-term concerns (roughly 1Y++ horizon)
- mgr’s assessment; stigma vs respect from team; figure-things-out speed benchmark; coworker benchmark
- stagnation, wasting my “potential”
- immigration issues — #1 concern of Deepak CM
- peer comparison
- kids’ academic competitiveness
10Y++ long-term concerns
- retirement planning
- kids’ well-being
- employability and income stability
- competence in job^interview; beat-fronts
- Some peers at my age worry about own health but I’m free from that worry.
Below are my biggest concerns when considering a lead dev role. Actually, many of my peers often hints “My role (as a mgr, or architect, or app owner..) is even harder” but I think they are Not more effective if asked to play the hands-on developer role.
- code reading — requires focus and stamina.
- In addition, taking ownership of a big code base requires
determination and confidence
- In addition, taking ownership of a big code base requires
- instrumentation — using prints or special tools, troubleshooting, error reproducing, ..
- pressure due to major feature not completed by impending deadlines
Note none of these is tested in any interview!
- How about firefighting? I tend to panic but my peers aren’t stronger than me technically!
- How about design? Not really my weakness. My peers’ designs are not necessarily better than mine
- knowledge of generic tech (rather than local system knowledge)? I’m actually stronger than most peers
- quality, attention to details? is usually my strength
- fine tuning? Most peers are not good at this
|(not ranked)||bonus||peers are ..||generic or local nlg?|
|code reading||no impact||some are stronger||local sys nlg|
|investigate||boss needs answers||usually no diff||local|
|design||somewhat visible||not stronger||some generic|
Update — Enjoyment is often short-lived and affected by too many factors like
- respect by mgr #bonus
- “strategic” learning #Barclays
- income cf to peers
Instead of Enjoyment, I often prefer “engagement”.
However, for both enjoyment and engagement, the signal-to-noise ratio is below 0.2 i.e. those “noise factors” above are at least 5 times stronger.
Background — discussion with an older fellow developer about helping our high-school kids select a major.
Example — Look at Aunt Gennifer. She changed her profession around age 40 to find a better paying and less boring job.
Example — grandpa has an ever-green interest in his research field, but most researchers in this field are not well-paid (it’s the least commercial field of research). In terms of income, I think grandpa’s medical and pension benefits are in the the top 1%.
Example — me. I entered trading-engine-dev circa 2007.
- It pays well above the average professional salary across all professions. (I was told U.S. family doctors earn about 150k only.)
- Market depth is excellent — look at my post on NBA salary.
- The constant pressure to upgrade and learn is perfectly acceptable to me. In fact, I seek opportunities to maintain my learning pace
- I don’t find it tiring or boring. For a few years before 2007, I told myself “I don’t want to remain a developer for life” but had a U-turn.
For most people, it’s hard to find a profession that’s not boring, not too tiring, and pays well, a
field you could keep plowing till retirement, if you ever retire.
In fact, such a field is likely to be /oversubscribed/ — too many hopeful new entrants but few would get in and fewer would survive 😦
Example — Lianzhong’s daughter Borong loves writing, but she realized it wouldn’t be an easy way to make a living. Similarly, a large number of individuals have a meaningful and rewarding “hobby” but can’t make a decent income from it
- tweaking with computers and gadgets
- visual arts # including photography
- literary arts
- performing arts #including music
- sports, games #including board and electronic
See also post on alpha geeks…
See also post on how fast you figure things out relative to peers
See also ##a few projects technically too challeng` 4me
See also https://bintanvictor.wordpress.com/2017/03/26/google-searchable-softwares/
see also https://bintanvictor.wordpress.com/2017/05/29/transparentsemi-transparentopaque-languages/
tuning? never experienced this challenge in my projects.
NPE? Never really difficult in my perience.
#1 complexity/opacity/lack of google help
eg: understanding a hugely complex system like the Quartz dag and layers
eg: replaying raw data, why multicast works consistently but tcp fails consistently
eg: adding ssl to Guardian. Followed the standard steps but didn’t work. Debugger was not able to reveal anything.
Eg: Quartz dag layers
Eg: Quartz cancelled trade
#2 Intermittent, hard to reproduce
eg: Memory leak is one example, in theory but not in my experience
eg: crashes in GMDS? Not really my problem.
eg: Quartz preferences screen frequently but intermittently fails to remember the setting. Unable to debug into it i.e. opaque.
With a transparent language, I am very likely (high correlation) to have higher GTD/productivity/KPI.
Bootstrap — with a transparent language, I’m confident to download an open source project and hack it (Moodle …). With an opaque language like C++, I can download, make and run it fine, but to make changes I often face the opacity challenge. Other developers are often more competent at this juncture.
Learning — The opaque parts of a language requires longer and more “tough” learning, but sometimes low market value or low market depth.
Competitiveness — I usually score higher percentiles in IV, and lower percentiles in GTD. The “
percentile spread” is wider and worse with opaque languages. Therefore, I feel 滥竽充数 more often
In this context, transparency is defined as the extent to which you can use __instrumentation__ (like debugger or print) to understand what’s going on.
- The larger systems tend to use the advanced language features, which are less transparent.
- The more low-level, the less transparent.
–Most of the items below are “languages” capable of expressing some complexity:
- [T] stored proc unless complex ones, which are uncommon
- [T] java threading is transparent to me, but not other developers
- [S] java reflection-based big systems
- [T] regular c++, c# and java apps
- [O]… but consider java dynamic proxy, which is used in virtually every non-trivial package
- [T] most python scripts
- [S] … but look at python import and other hacks. Import is required in large python systems.
- [O] quartz
- [S] Spring underlying code base. I initially thought it was transparent. Transparent to Piroz
- [O] Swing visual components
- [O] C# WCF, remoting
- [T] VBA in Excel
- —-below are not “languages” even in the generalized sense
- [S] git .. semi-transparency became stressor cos KPI!
- [O] java GC … but NO STRESS cos so far this is not a KPI
- [O] MOM low level interface
- [S] memory leak detectors in java, c#, c++
- [O] protobuf. I think the java binding uses proxies
- [T] XML + simple SAX/DOM
- [S =semi-transparent]
- [O =opaque]
This topic is Rather important to my stress level, my available time for learning, my available time for family….
For example, with Quartz, I must ask around and experiment (millions of times). Slow to build a coherent understanding. Slow ramp-up. (In contrast, with Python I could do that by reading good articles online.) So my productivity lag/gap remains even after a few years.
Other Negative examples – Tibrv, Autosys, Accurev, Less-known boost libraries,..
MSVS? Most of the search results are about c#, so it’s somewhat harder to solve problems.
Eclipse CDT? Most of the search results are about Eclipse java.
Positive examples – vbscript, DOS batch,
Yet, this stressor is mild compared to “performance warnings”.
Both mental stress and physical stress. Let’s take a step back and compare the stress intensity during job hunt vs GTD stress on the job.
Many people say it’s too stressful and tiring to keep interviewing compared to a long-term job in a big company. Well, I blogged many times that I need to keep interviewing…. The stress is so far manageable.
On a regular job, the GTD stress levels range from 5 to 7 on a scale of 10 (Donald Trump on women;). Often rise to 8.
Became 9 or 10 whenever (as FTE) boss gave a negative feedback. I know from several past experiences. In contrast, contract projects felt much better.
(To be fair, I did improve after the negative feedback.)
During my job hunt including the challenging Singapore lap, my stress level felt like 4 to 7, but often positive stress, perhaps due to positive progress and positive energy.
Conclusion — I always felt more confident on the open market than recovering from setback on a job.
Many people are put off by the uncertainties and risks, and don’t see I the light at end of the tunnel
who move my cheese?
As stated in other posts, it’s all about local system knowledge + tools
Survival (and bonus, stress..) is always linked to benchmark against team peers, not
external teams like another department, not the manager himself. If entire team is low-calibre, then it’s a problem for the manager, but rarely your own problem. (It might threaten your team’s survival…)
LG2: system performance. Most guys in the team probably aren’t so good at this kinda thing, unless the team has a specific mandate to monitor and fix performance.
LG2: test coverage. May affect your reputation, but once I figure things out I can often relax and test
LG2: code smell. May affect your reputation but is clearly a LGlp compared to getting things to work.
LG2: code quality
LG2: readability by the team lead. OK team lead may complain, but if it works then it’s relatively easy to improve it.
LG2: extensibility. Yang is big on this. Many books are big on this, but it’s an art not a science. Many team members probably aren’t good at it.
LG2: system stability such as occasional hangs. Often a non-show-stopper.
** eg: my VS2015 build tends to hang and I had to research on how to fix it — show-stopper.
All of the above are secondary to … “figuring things out” i.e. how to get something to work, at a minimum usability.
Design? See also posts on arch_job. Can be a real problem, because if your design gets shot down, you waste time on rework.
This is life-n-death: if you are not adding enough value you are out…
With important exceptions (Stirt, Lab49..) Wall street systems are stringent about time line, less about system failures, even less about maintainability or total cost of ownership or Testing. I feel very few (like 5%) Wall St systems are high precision and I include the pricing, risk, trade execution systems. Numerical accuracy is important to the users though, because those numbers are about the only thing they can understand. Their job is about control on those numbers.
In City muni, Boris’s code was thrown out because it didn’t make it to production. Any production code is controlled not by dev team but many many layers of control measures. So my production code in Citi will live.
If you are slow, Anthony Lin feels they may remove you and get a replacement to hit the deadline. If they feel it’s hard to find replacement and train him up, then they keep you – all about time lines.
Hou Li felt your effort does protect you – 8.30 – 6pm everyday. If still slow, then manager may agree estimate is wrong. She felt deadline and effort estimate are arbitrary. However, if you are obviously slower than peers, then boss knows it.
I know Barclays (or any big bank) pays a VP salary to experienced developers. Would they pay the same for someone very familiar with IDE, CVS, automated build/release/test, script automation, back-up … lots of tools?
No because the latter skill is a commodity “operational” skill compared to the “creational” skill of a product developer. In a way, developers are a revenue center. Developers need analysis, design, deep experience, domain knowledge…
I feel interviewers ask too much about algorithm/data structure, problem solving, financial domain knowledge, and not enough about those operational skills. I guess in 50% of dev team there’s no one specializing in those infrastructure stuff, so every developer must pick up this skill, which can really impact productivity and trouble-shooting.
I think instrumentation skills (see other posts) are closely related to this.
For eg, i try to publish some worthwhile blog post every week. Never stressed me out.
For eg, in my early 30's I used to attend a quarterly fitness test
For eg, I was improving my coding (c++/c# etc) in my spare time — i do feel a bit disappointed if i make no progress for a month, but this pressure is still small, compared to many external stressors in my life:)
For eg, I used come to office on weekends and work on unfinished tasks. Not forced to.
For eg, I used to try job interviews when my job is safe. Would be real stressful if job is under threat.
For eg, helping my son with piano and swimming practice can feel stressful, but there's a ….. safety valve.
Extreme eg: When programming Perl, php (and python) I don’t rely on any complicated tool. The libraries I use tend to be simple and small.
Extreme eg: Excel VBA is fully inflicted with infrastructure dependency. Any idiosyncrasy or nuance of Excel can give inexplicable subtleties.
Java is a powerful, mid-level language with a remarkably robust sandbox. The ugly, dirty world outside is largely kept away from us programmers, so we operate in a clean room, sandbox, or a constant-temperature green house.
However, when I had to debug into Spring-JMS I hit the same infrastructure-dependency.
Eclipse Debugger — is less well-behaving and less understood than other aspects of java development. When the source code is out of sync with the executing binary, things could keep going but would fail in strange ways — undefined behavior.
How about stack overflow. No exception. Just crash.
— c# —
The c# language is more feature-rich than java, but still consistent and structured. No complaints. However, when you use c# for real projects you hit infrastructure dependency. I mentioned in numerous blogs how much platform knowledge needed.
Unlike the famed write-once-run-anywhere portability of java, Many really, really important parts of C# development are tied into the “platform” outside, meaning developers need that platform knowledge. Just a few examples
* threading implemented on top of win threads
* many critical tasks need MSVS
* Excel integration
* windows service integration
(“Tool” includes the entire system used in the dev process.)
You asked me why my OC manager likes to beat me up. I thought about it. Here’s one reason.
My manager complains I’m slow with my development projects. In this job (as in many other jobs), people don’t say my code quality or design is bad. I think most of the code they write isn’t great either. We are just hoping to churn out working code on time. I do hope to but won’t try too hard to make my code beautiful, low-maintenance, testable, easy to change, easy to understand. Implicitly, that’s the unspoken agreement with the boss. One quality where I exceed minimum requirement is error-condition handling — i want my code to behave reasonably under any conceivable condition. I don’t want “undefined behavior”. I don’t want surprises. Anyway, my boss only complains about how slow I complete projects, not about quality. Invariably it boils down to
troubleshooting skill like googling, asking around, understanding logs, and diagnostic tools. Sometimes not easy for anyone. Most of these technical problems involve more than code complexity in my c# codebase, and now I realize that’s the key.
Now I believe my
c# language skill is perhaps better than the average c# developer. For eg, I’m confident taking on technical challenges involving threading, linq, complex data structures, complex delegates+events. (The toughest coding interviews on the west coast sometimes cover nothing but a little tight/dense algorithm. These can be extremely IQ-intensive, more than I can handle but I feel comfortable that I can beat most c# developers at this game.) In a nutshell, if the problem is purely about c# language, I am confident. Most real world technical problem-solving goes beyond that. There are too many of these problems to enumerate. Below are just a few examples.
eg: When the same code works in one environment not in another environment, I feel 30% of the time it’s due to some permission or security issue. Error message is usually misleading. Even worse when nothing happens, without any error msg. Can take ages to uncover the root cause.
eg: GUI troubleshooting always involves some tool and some infrastructure that’s not written by me…
eg: GUI system is invariably a client to some server-side. There’s always some networking involved.
eg: Async communication might be considered a pure language complexity but in reality troubleshooting often involves some vendor-supplied infrastructure code which sets up the communication and threading.
eg: WCF and remoting always involves tools to generate proxy, network layer, serialization…
eg: My biggest source of troubleshooting headache is VisualStudio… I had many problems with debugger, with build, with project references…
In order to reproduce a problem, I often need to check out and build many projects, configure many modules, hunt down all the required libraries, set up all the dependencies, install a bunch of infrastructure software… The set-up can take days for the uninitialized, and is error-prone and not fully documented. This happens everywhere so I’m not complaining, but this often leads to a lot of delay and complaint from boss.
Update — if I avoid the coworker-benchmarking, then I don’t mind sacrificing some income.
Q: Do you prefer a job (under a boss) you are comfortable with, at a typical IT salary? Or do you prefer a job with above-average income, but demanding, suppressive(like Sourabh) boss? In both cases, let’s assume long term job security is average (far from ideal), workload is reasonable, commute is average.
A : I’d favor the income if it’s more than $1k/m diff, but not sure if I can cope with the unfriendly environmental factors.
A: in early 2018 I chose Mvea team. No regret so far
Health + employability(security) are my real, long term priorities, not “premium” salary. My parents keep reminding me the damage of long-term workplace stress…
Recall the GS/Macquarie experience – workload, job nature, security…. but all are mild compared to performance warnings.
A: now I feel $2k/m will bribe me.
These are not the heaviest stressors — see ## 2 heaviest work stressors
- Q: Do you need to record how you allocate time to assignments in blocks of 2 hours, 4 hours or 8 hours?
- Only happened in GS
- Q: Do you need to everyday describe, verbally, what you did in the previous day? I never did.
- Q: When neck, back, or eyes feel tired, do you always feel free to get away from computers for a while? I always do
- Q: Do regular developers feel relaxed enough to write, if they like to, documentation in wiki or for other people? I usually do
- Q: Do you get time to make 30-minute chitchats with friends on office phone during office hours? I usually do.
- Q: Do you feel pressure to return to work after 45 minutes at lunch with a friend, assuming no official policy about how long lunch break is.
- Only happened in GS, BAML, Barclays
- Q: do you feel relaxed enough to read department newsletter? Exclude brief light periods after a project.
- Q: do you feel relaxed enough to read technology newsletter? Exclude brief light periods after a project.
- Q: Do you think twice about going out for lunch once a week?
- Q: Do you ever work out, however briefly, before leaving office?
- I did in BAML, Barclays, Macquarie, ICE
- Q: Suppose you are stuck waiting for an answer or for a build to finish, do you feel you can just stop working for 15 minutes? What if you get such “waiting periods” everyday? Does your manager make it a rule that you should take up some of the numerous other tasks during such a short wait?
- Only happened in GS
- Q: As a developer, during office hours do you feel relaxed enough to read business publication related to work? I believe (even lead) developers never have to read such things to do a decent job. Required business knowledge is highly site-specific and accrue during projects. Knowledge about industry is never a must.
My Citi mgr divided my work into ProdSupport + Greenfield + BAU i.e. (strategic or quick) enhancements on current production codebase.
In ML, effort is divided into BAU 66% + 33% Greenfield
GS is 75-25
One of the hardest part in Greenfield is replicating BAU behavior. The closer we get to prod release, the more we rely on prod system knowledge. Those nitty-gritty BAU behaviors become necessary features and show stoppers.
I think recruiters generally see Greenfield as more attractive. More design involved. More experienced candidates required.
A friend said green field becomes stressful as release date approaches.
Update — embrace these code smells to survive the coworker-benchmarking
In fast-paced Wall St, you can copy-paste, as long as you remember how many places to keep in-sync. In stark contrast, my ex-colleague Chad pointed out that even a one-liner sybase API call should be made a shared routine and a choke point among several execution paths. If everyone uses this same routine to access the DB, then it’s easier to change code. This is extreme DRYness. The opposite extreme is copy-paste or “code cloning” as some GS veteran described. Other wall st developers basically said Don’t bother with refactoring. I’m extremely uncomfortable with such quick and dirty code smells, but under extreme delivery pressure, this is often the only way to hit deadlines. Similarly,
*Use global variables.
** -Use global static collections. Remember my collection of locks in my ECN OMS kernel?
** -Instead of passing local variables as arguments, make them static or instance fields.
** -Use database or env var as global variables.
** -Use spring context as global variables.
* Tolerate duplicate variables (and functions) serving the same purpose. Don’t bother to refactor, simplify or clean up. Who cares about readablility? Not your boss! Maybe the next maintainer but don’t assume that.
** Given the requirement that a subclass field and a parent field pointing to the same object, due to bugs, sometimes they don’t. Best solution is to clean up the subclass, but don’t bother.
** 2 fields (out of 100) should always point to the same object, but due to bugs, sometimes they don’t. Best solution is to remove one, but don’t bother.
** a field and a field of a method param should always point to the same object, so the field in the param’s class is completely unnecessary distraction. Should clean up the param’s class, but don’t bother.
** a field and method parameter actually serve the same purpose.
*** maybe they refer to the same object, so the method param is nothing but noise. Tolerate the noise.
** tolerate a large number (100’s) of similar methods in the same class. Best to consolidate them to one, but don’t bother.
** tolerate many similar methods across classes. Don’t bother to consolidate them.
** tolerate tons of unused variables. Sometimes IDE can’t even detect those.
– use macro to substitute a checked version of vector/string. It’s cleaner but more work to use non-macro solutions.
– don’t bother with any validation until someone complains. Now, validation is often the main job of an entire applicaiton, but if your boss doesn’t require you to validate, then don’t bother. If things break, blame upstream or downstream for not validating. Use GarbageInGarbageOut as your defence.
– VeryLongVeryUgly methods, with multi-level nested if/while
– VLVU signatures, making it hard to understand (the 20 arguments in) a CALL to such a method.
– many methods could be made static to simplify usage — no need to construct these objects 9,999 times. It’s quite safe to refactor, but don’t bother to refactor.
– Don’t bother with null checks. You often don’t know how to handle nulls. You need to ask around why the nulls — extra work, thankless. If you can pass UAT, then NPE is (supposedly) unlikely. If it happens in production, you aren’t the only guy to blame. But if you finish your projects too slow, you can really suffer.
– Don’t bother with return value checks. Again, use UAT as your shield.
– use goto or exceptions to break out of loops and call stacks. Use exception for random jump.
– Ignore composed method pattern. Tolerate super long methods.
-Use if/else rather than virtual functions
-Use map of (String,Object) as cheap value objects
-Forget about DRY (Don’t Repeat Yourself)
-Tolerate super long signatures for constructors, rather than builder pattern ( [[EffectiveJava]] )
– don’t bother to close jdbc connections in the finally block
– open and close jdbc connections whenever you like. Don’t bother to reuse connections. Hurts performance but who cares:)
-Don’t pass jdbc connections or jdbcTemplates. In any context use a public static method to get hold of a connection.
– create new objects whenever you feel like, instead of efficiently reuse. Of course stateless objects can be safely reused, creating new ones are cheap. It hurts performance but who cares about performance?
-Use spring queryForMap() whenever convenience
– Tolerate tons of similar anon inner classes that should be consolidated
– Tolerate 4 levels of inner classes (due to copy-paste).
– Don’t bother with thread pools. Create any number of threads any time you need them.
– tolerate clusters of objects. No need to make a glue class for them
-Use public mutable fields; Don’t both with getters/setters
-JMX to open a backdoor into production JVM. Don’t insist on password control.
-print line# and method name in log4j. Don’t worry about performance hit
-Don’t bother with factory methods; call ctor whenever quick and dirty
-Don’t bother with immutables.
– tolerate outdated, misleading source documentation. Don’t bother to update. Who cares:)
– some documentations across classes contradict each other. Don’t bother to straighten.
When I first joined GS, I was in awe of my managers’ /commitment/ to project deadlines. Before GS, I always felt deadlines are usually arbitrary and deserve little respect. I used to feel deep in my guts that developers ultimately hold an upper hand over managers *when* (not IF) deadlines become difficult. Basically, I feel the regular developers are hard working but aren’t saints, so we are all to varying degrees lazy and undisciplined, and tends to leave too much work to the end. On the other hand, managers can never be 100% on top of every Dirty detail, the quick and Dirty, and the Dirt swept under the carpet, so they are always surprised at end of the time frame.
After a few years in GS, I feel on Wall St, a lot is at stake when the timeline pressure heats up. Managers are visibly concerned about missing deadlines. Developers often work long hours. Major source of developer stress (and burnout).
If you feel elsewhere developers miss timelines 80% of the time, then it’s 20% in GS.
The hallmark of Wall St IT teams — pays more and demands more productivity (quicker delivery). Keyword is productivity.
Everyone can stick to a timeline if it’s long enough, but GS typically gives you one-tenth to half the timeline given elsewhere. It’s not uncommon to see a 10-month project squeezed into 1-month.
A lot of your career is at stake too. If you manage user/manager expectations well, then you could win big wins and move up.
That was my view while in GS. After many years outside GS, I feel Barclays and BAML try to emulate GS with up to 50% effectiveness. Outside GS, the other Wall St IT managers can also give demanding deadlines, but the consequences of miss is not so severe. If you miss one without some scapegoat, then you can get any amount of pressure including but not limited to
- no pressure at all
- fake pressure
- asked to work OT
- sidelined to less critical roles
- given some coach to work with you on the same project
- official warning
- performance improvement process. (I hate this, though it is designed to protect the employee.)
Here's another reason GS developers get _2_to_3_ times the work done per man-month compared to other companies on Wall Street.
Say at beginning of Jan I start a 4-week project in GS. Need to release by end of month. Then scope expands by 30% — fine we can absorb it in the same timeframe. Then some unrelated production issue pops up. No one else knows it better, so I let it squeeze into my workload. It is taking many hours, but manager won't extend the deadline. Then other mini-projects squeeze into my workload. I end up spending only half my time on the main project. However, deadline stays the same. I'm now expected to double up my effort to swallow all the new stuff squeezed in.
You may think it's unreasonable, but the hard, cold fact is, the other team members could cope, so must I too. Sometimes they look just like sponge with unlimited absorption.
Mind you, the initial 4-week estimate is not fake — It's a reasonable estimate by all accounts. But GS managers know they can squeeze in more stuff later, so they do.
A developer position is created by business, and funded by business. Why wall street pays sky high for developers? Because business generates high profit and business wants more IT guys to help them shorten “time to market”.
In my GS system, code quality is low priority. But many GS people say productivity is higher than other banks. I believe “productivity” is measured by the number of many-hours actually spent and _booked_ to the project. But how is GS time booking different from other banks?
For a developer, the number of man-hour in a year is a fixed 1920 man-hours. I typically book into 20 – 40 projects each year. I feel at least 6 levels of managers above me (up to MD and partner) look at my time booking data to manage their budget and expenditure. Unlike other banks, GS line managers look bad in front of very senior managers if developers overbook time. Developer is a scarce resource in GS and many levels of managers watch their burn-rate. Other banks are less burn-rate-conscious.
Suppose a project is budgeted 40 man-hours but is expanding to 60 due to scope increase, then other projects must shift to the next year. Business don’t like their project postponed, so they push IT managers, hard. IT managers want to please the business, so they push developers. Other banks are less determined.
In GS, there’s real resistance to postponing projects to next year. Most employees and consultants endeavor to deliver in time even though requirement often change. In other banks, IT guys say “we aren’t machines or supermen”, but in GS many developers are expected to be 80% more productive than other banks. This is achievable if a developer knows her system inside out.
If I say “My project is booking 50% more time because requirements changed drastically”. Manager would come down to scrutinize and ask “Every project has changing requirements, but they don’t exceed budget this much. Why are you slower?” I feel other banks don’t say this.
I feel GS is more productive because business can really push IT. Both business and IT are motivated by promotion and bonus
 “Finish your work on time, with reasonable quality”
You asked how to reduce the pain and stress.
- keep healthy. Lving in such a difficult place, every little effort makes me feel good about myself.
- Remember that many advertised fast food is less healthy than we eat in S'pore
- avoid too much unhealthy snacks esp. during long office hours. tough for some people. I try to bring fruits and “healthy” biscuits
- regular exercise. tough for most people.
- take breaks during long work hours
- help my wife who is under more pain than me
- find some full-time activity to occupy her time
- spend quality time together
- try to get her to make new friends
- try to get her to become interested in learning English
- try to get her to find some new hobbies
- live around Chinatowns, where she can find Chinese food
- work long hours and feel good about it. This helps my adjustment.
- make new friends. I didn't find any time for this, since i was so busy with job and a million other “important” things.
- call home regularly
- increase income
- a mobile phone that can receive Chinese SMS from our families in China. We can't afford it now.
- better accommodation
- less time wasted on commuting. Extremely important to me.
- my wife will afford many foods that are simply priced beyond us
- more sight-seeing. important for my wife. There are so many places to see in this vast country.
- perhaps a more suitable training course for my wife. Right now many of them are just too expensive
- some new clothes for her