{"id":191927,"date":"2015-02-09T00:00:00","date_gmt":"2015-02-09T12:35:04","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/msr-research-item\/hints-and-principles-for-computer-system-design-2\/"},"modified":"2016-07-15T15:21:57","modified_gmt":"2016-07-15T22:21:57","slug":"hints-and-principles-for-computer-system-design-2","status":"publish","type":"msr-video","link":"https:\/\/www.microsoft.com\/en-us\/research\/video\/hints-and-principles-for-computer-system-design-2\/","title":{"rendered":"Hints and Principles for Computer System Design"},"content":{"rendered":"
\n

I have many hints that are often helpful in designing computer systems, and I also know a few principles. There are several ways to organize them: .Goals (What you want)-simple, timely, efficient, adaptable, dependable, yummy. .Methods (How to get it)-approximate, increment, iterate, indirect, divide and conquer. .Phases (When to apply them)-requirements, architecture, process, techniques.<\/p>\n

Of course the goals are in conflict, and engineering is the art of making tradeoffs, for instance among features, speed, cost, dependability, and time to market. Some simpler oppositions are: .For adaptable, between evolving and fixed, monolithic and extensible, scalable and bounded. .For dependable, between deterministic and non-deterministic, reliable and flaky, consistent and eventual. .For incremental, between indirect and inline, dynamic and static, experiment and plan, discover and prove.<\/p>\n

It also helps to choose the right coordinate system, just as center of mass coordinates make many dynamics problems easier. You can view the system state as a name?value map, or as an initial state and a sequence of operations that transform the state. You can view a function as code or as a table or as a sequence of partial functions. Notation, vocabulary, and syntax are other kinds of coordinates.<\/p>\n

In the complex process of designing systems, both principles and hints can only be justified by examples of what has worked and what has not.<\/p>\n<\/div>\n

<\/p>\n","protected":false},"excerpt":{"rendered":"

I have many hints that are often helpful in designing computer systems, and I also know a few principles. There are several ways to organize them: .Goals (What you want)-simple, timely, efficient, adaptable, dependable, yummy. .Methods (How to get it)-approximate, increment, iterate, indirect, divide and conquer. .Phases (When to apply them)-requirements, architecture, process, techniques. Of […]<\/p>\n","protected":false},"featured_media":198863,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"footnotes":""},"research-area":[],"msr-video-type":[],"msr-locale":[268875],"msr-impact-theme":[],"msr-pillar":[],"class_list":["post-191927","msr-video","type-msr-video","status-publish","has-post-thumbnail","hentry","msr-locale-en_us"],"msr_download_urls":"","msr_external_url":"https:\/\/youtu.be\/TRLJ6XdmgnA","msr_secondary_video_url":"","msr_video_file":"","_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video\/191927"}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-video"}],"version-history":[{"count":0,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video\/191927\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/198863"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=191927"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=191927"},{"taxonomy":"msr-video-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video-type?post=191927"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=191927"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=191927"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=191927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}