<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

# List Of Documents Submitted To dev@beam.apache.org In 2016
| No. | Author | Subject | Date (UTC) |
|---|---|---|---|
| 1 | Frances Perry | [Apache Beam: Technical Vision](https://docs.google.com/document/d/1UyAeugHxZmVlQ5cEWo_eOPgXNQA1oD-rGooWOSwAqh8) | 2016-02-09 11:01:41 |
| 2 | Amit Sela | [Apache Beam (incubating) - Spark Runner Technical Vision](https://docs.google.com/document/d/1y4qlQinjjrusGWlgq-mYmbxRW2z7-_X5Xax-GG0YsC0) | 2016-02-10 13:46:37 |
| 3 | Seetharam Venkatesh | [Issue Navigator - ASF JIRA](http://s.apache.org/gsoc2016ideas) | 2016-02-15 13:38:18 |
| 4 | Kenneth Knowles | [Lateness (and Panes) in Apache Beam (incubating)](https://docs.google.com/document/d/12r7frmxNickxB5tbpuEh_n35_IJeVZn1peOrBrhhP6Y) | 2016-03-01 11:50:30 |
| 5 | Tyler Akidau | [Beam Model & Runner Compatibility Matrix - Google Sheets](https://docs.google.com/spreadsheets/d/1OM077lZBARrtUi6g0X0O0PHaIbFKCD6v0djRefQRE1I) | 2016-03-09 17:14:29 |
| 6 | Ben Chambers | [Static Display Data](https://docs.google.com/document/d/11enEB9JwVp6vO0uOYYTMYTGkr3TdNfELwWqoiUg5ZxM) | 2016-03-14 20:25:44 |
| 7 | Kenneth Knowles | [Apache Beam (incubating) Pipeline Runner API 1-Pager](https://docs.google.com/document/d/1zEJN06YaKEIMhSckVjVgLQIh-jxqkgDRSnos1AOVSQ4) | 2016-03-15 11:28:45 |
| 8 | Frances Perry | [[Draft] Apache Beam Contribution Guide](https://docs.google.com/document/d/1syFyfqIsGOYDE_Hn3ZkRd8a6ylcc64Kud9YtrGHgU0E) | 2016-03-17 17:19:08 |
| 9 | Thomas Groh | [Writing More Expressive Beam Tests](https://docs.google.com/document/d/1fZUUbG2LxBtqCVabQshldXIhkMcXepsbv2vuuny8Ix4) | 2016-03-21 20:38:53 |
| 10 | Kenneth Knowles | [Apache Beam (Incubating) Pipeline Runner API Proposal](https://docs.google.com/document/d/1bao-5B6uBuf-kwH1meenAuXXS0c9cBQ1B2J59I3FiyI) | 2016-03-23 17:17:08 |
| 11 | Kam Kasravi | [ML models and pipelines](https://docs.google.com/document/d/17cRZk_yqHm3C0fljivjN66MbLkeKS1yjo4PBECHb-xA) | 2016-05-13 12:54:13 |
| 12 | Kenneth Knowles | [Side Input Architecture for Apache Beam (incubating) 1-Pager](https://s.apache.org/beam-side-inputs-1-pager) | 2016-05-13 13:50:35 |
| 13 | Kenneth Knowles | [Triggers in Apache Beam (incubating)](https://s.apache.org/beam-triggers) | 2016-05-30 15:18:34 |
| 14 | Thomas Groh | [Capability Matrix Testing](https://docs.google.com/document/d/1fICxq32t9yWn9qXhmT07xpclHeHX2VlUyVtpi2WzzGM) | 2016-06-10 19:34:34 |
| 15 | N/A| [Website Layout](https://docs.google.com/document/d/1-0jMv7NnYp0Ttt4voulUMwVe_qjBYeNMLm2LusYF3gQ) | 2016-06-17 00:53:45 |
| 16 | Thomas Groh | [DoFn Instance Setup and Teardown](https://docs.google.com/document/d/1LLQqggSePURt3XavKBGV7SZJYQ4NW8yCu63lBchzMRk) | 2016-06-28 12:06:48 |
| 17 | Jesse Anderson | [Apache Beam Interviews](https://docs.google.com/document/d/1IQt6FfQI7W4d2QxZm6WwGnZFdA8JmaseKZrMGPu8zgY) | 2016-07-07 20:18:35 |
| 18 | Kenneth Knowles | [State and Timers for DoFn in Apache Beam (incubating)](https://s.apache.org/beam-state) | 2016-07-26 23:20:33 |
| 19 | Kenneth Knowles | [Presenting: A New DoFn - Google Slides](https://s.apache.org/presenting-a-new-dofn) | 2016-07-26 23:29:59 |
| 20 | Sam McVeety | [Beam Proposal for Dynamic PipelineOptions](https://docs.google.com/document/d/1I-iIgWDYasb7ZmXbGBHdok_IK1r1YAJ90JG5Fz0_28o) | 2016-07-29 15:14:32 |
| 21 | Eugene Kirpichov | [Splittable DoFn proposal](https://s.apache.org/splittable-do-fn) | 2016-08-04 13:45:49 |
| 22 | Eugene Kirpichov | [Apache URL Shortener](https://s.apache.org/) | 2016-08-18 20:29:32 |
| 23 | Ben Chambers and Kenneth Knowles | [A New DoFn](https://s.apache.org/a-new-dofn) | 2016-08-19 14:52:34 |
| 24 | Eugene Kirpichov, Daniel Mills, Robert Bradshaw | [Splittable DoFn proposal](https://docs.google.com/document/d/1AQmx-T9XjSi1PNoEp5_L-lT0j7BkgTbmQnc6uFEMI4c) | 2016-08-29 11:40:41 |
| 25 | Kenneth Knowles | [WindowMappingFn / Side Input GC 1-Pager](https://s.apache.org/beam-windowmappingfn-1-pager) | 2016-09-15 14:51:34 |
| 26 | Ben Chambers | [User Defined Metrics API](http://s.apache.org/beam-metrics-api) | 2016-10-05 14:51:18 |
| 27 | Amit Sela | [Reading from an unbounded source with Spark](https://docs.google.com/document/d/12BzHbETDt7ICIF7vc8zzCeLllmIpvvaVDIdBlcIwE1M) | 2016-10-09 03:10:29 |
| 28 | Robert Bradshaw | [Splittable DoFn proposal](https://s.apache.org/splittable-do-fn?) | 2016-10-10 13:22:56 |
| 29 | Thomas Groh | [Availability of PipelineOptions](https://docs.google.com/document/d/1Wr05cYdqnCfrLLqSk--XmGMGgDwwNwWZaFbxLKvPqEQ) | 2016-10-24 19:36:10 |
| 30 | Kenneth Knowles | [Apache Beam (Incubating) Pipeline Runner API Proposal](https://s.apache.org/beam-runner-api) | 2016-11-07 23:11:15 |
| 31 | Pei He | [Apache Beam (incubating) Proposal:  Part 1: IOChannelFactory Redesign](https://docs.google.com/document/d/11TdPyZ9_zmjokhNWM3Id-XJsVG3qel2lhdKTknmZ_7M) | 2016-11-16 19:09:51 |
| 32 | Etienne Chauchot | [Testing IO Transforms in Apache Beam](https://docs.google.com/document/d/153J9jPQhMCNi_eBzJfhAg-NprQ7vbf1jNVRgdqeEE8I) | 2016-12-01 11:19:47 |
| 33 | Davor Bonaci | [Apache Beam (incubating) Proposal:  Part 2: Configurable BeamFileSystem](https://docs.google.com/document/d/1-7vo9nLRsEEzDGnb562PuL4q9mUiq_ZVpCAiyyJw8p8) | 2016-12-30 23:53:13 |