1,164 karma · joined October 24, 2015
- Organize the legislature(s) to pass some kind of emergency act that gives protection around PCI compliance and that sort of thing to new engineering teams
- Hire business and technical experts, fast
- Build a system on AWS that can handle massive scale and start offloading the most important business functionality to that system (things like registering for aid, fraud prevention)
- when things begin to return to normal, start processing requests through the original system, deal with problems, whatever
I know all of this is not easy. Legal and compliance stuff is tough, and I know the domain itself must not exactly be simple. But this is an emergency, and it calls for emergency measures. Trying to hack your way through an ancient code base on the fly seems like it might be doomed to failure.
https://www.nakedcapitalism.com/2016/07/cobol-and-legacy-cod...
In general, 2 good principles are:
1. Put the punch at the end of a sentence.
2. Put familiar information at the beginning of a sentence and new information toward the end.
The passive voice can help you with both of these design goals.
Orwell talked about where the passive voice is most dangerous/bad. It mainly comes down to thoughtlessness or insincerity. The passive voice removes or hides the actor, so it's useful for people trying to cloak their beliefs or hide assumptions.
"Politics and the English Language" is a great read, as is the book "Style."
That said, you should know why you're studying finance if you're going to spend the time on it. For me intellectual curiosity is a good enough motivator. It also helps me evaluate claims made by, for example, public officials. But I think it is reasonable to question whether it will significantly improve your personal financial situation.
Some other resources I came across via those and friends:
• "Other People's Money" by Kay
• "Zombie Banks"
• "The Money Problem"
• This NY Fed study of shadow banking: https://www.ft.com/content/1a222bf4-f33d-11df-a4fa-00144feab...
• "All the Devils are Here"
https://news.ycombinator.com/item?id=22343786
It seems like if we want to solve this problem we need to somehow modify users' behavior by making them aware that indiscriminate browsing is a risk.
PM: Let's go through our prioritized features. First we would like Feature A.
Team: That's probably easy, we can do it in a day or so.
PM: Great. Next we need Feature B. I know this one looks a little more complicated.
Team: Yeah, that's more like a week.
PM: That probably isn't worth it to me. We can probably push this feature back a couple releases, and maybe take out part of it.
Team: Would it help if we just did Part X? That seems like it would give you most of the value and it would be much easier.
And so on. The constant cost-benefit analysis, reprioritization, and rescoping was a great lever and made the team very productive.
The other 4 things, all related I think, that made us effective were:
• Everyone sitting together. I could go ask the designer or PM a clarifying question at any time.
• TDD. I would constantly start to write a test and realize that something didn't make sense—some assumptions were conflicting, or we needed to do another story before the one I was working, etc.
• Pairing. Many times I'd have written the test, had cleared my plan with the PM, and my pairing partner would point out a different perspective or catch one of the things I described above.
• Frequent releases, about quarterly at first and down to bi-weekly at one point.
In all cases, what we were really doing is optimizing the value of NOT doing things. We were helping the PM understand her costs, but we were also helping her eliminate huge chunks of wasteful work, e.g. building things users didn't want, things that didn't integrate well, and so on. Estimating was a piece of it, but it was really the buy-in from the business to accept our estimates and more importantly to trust us as partners in the scoping and planning process, and doing that process fluidly, that made us successful.
Complexity comes from two sources in software projects. The first is the domain. As other commenters have pointed out, domain experts are usually half-aware of their domain requirements because much of the complexity has been buried under their expertise and intuition. Domain requirements also inherently change over time as markets, professional standards, and technology evolve. So the process of development involves a shifting discovery of new aspects of the domain as things which were unconscious become consciously learned.
The other aspect of complexity is the technology applied to the problem. Computer technology is inherently complex, and the imperfect mapping between domain problems and technology adds a third angle.
The best books I've seen for dealing with these problems are "Clean Architecture," "A Philosophy of Software Design," and "Principles of Product Development Flow." The first two explain how to build good systems that encapsulate complexity and are geared towards changeability. Such systems are flexible as new aspects of domain complexity are discovered over time. The latter book takes a higher level view of how to design projects to cope with the discovery process in a way that is economically viable and justifiable to the people financing projects, and also in a way that arranges work so that developers can actually be productive and not become swamped by the complexity problem or bad processes and practices.
1. Discrete structure/form. Yes you can enforce this yourself, but it's not inherent to the system. This means it takes some additional layer of work to group and move items around (e.g. of trying to keep in a prioritized order).
2. Free-form drawing/diagramming.
3. A built-in notion of time.
All of these are very important to me. Being able to group and shuffle the order of discrete items like todos is very nice for categorizing and prioritizing. Arranging future concerns on the basis of time (I have hard-time, soft-time, and any-time sections of my lists) is important for forecasting. And being able to freely draw is really important for things like architecture and logic diagrams, or UI mockups, or anything abstract that has structure (like a graph or list).
Where text really does shine, IMO, is logging/journaling and capturing knowledge bases or project details. Being able to just dump that stuff somewhere in a stream of consciousness manner and search it later is very useful.
My personal system is to use a pocket-size Moleskine (soft cover) and Microsoft Office tools, which is nice because I run Linux but have to deal with Word and Excel junk all the time anyway. Excel is great for organizing tasks in a GTD-ish manner and moving items around in a discretely, Word is good for checklists and knowledge bases, OneNote is a solid journal, and Outlook is a good calendar for week-ahead type planning. They also all support photos, so I can snap pictures when I want to persist things from my physical notebook such as diagrams or ideas.
I really don't think there's a silver bullet when it comes to tools or systems, so you should start from a fine-grained understanding of your needs and work from there. But plaintext as a format has pros and cons like everything else.