{"id":19712414,"url":"https://github.com/springernature/kotlin-playbook","last_synced_at":"2025-10-05T08:43:52.647Z","repository":{"id":45518909,"uuid":"211871695","full_name":"springernature/kotlin-playbook","owner":"springernature","description":"How we write Kotlin code","archived":false,"fork":false,"pushed_at":"2020-02-25T08:56:13.000Z","size":1446,"stargazers_count":97,"open_issues_count":1,"forks_count":8,"subscribers_count":154,"default_branch":"master","last_synced_at":"2025-04-05T18:52:06.824Z","etag":null,"topics":["kotlin","playbook"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/springernature.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"copying-extension-functions/README.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-30T13:53:33.000Z","updated_at":"2025-01-30T03:00:08.000Z","dependencies_parsed_at":"2022-09-11T15:02:47.149Z","dependency_job_id":null,"html_url":"https://github.com/springernature/kotlin-playbook","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fkotlin-playbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fkotlin-playbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fkotlin-playbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fkotlin-playbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/springernature","download_url":"https://codeload.github.com/springernature/kotlin-playbook/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251559767,"owners_count":21609070,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kotlin","playbook"],"created_at":"2024-11-11T22:17:05.010Z","updated_at":"2025-10-05T08:43:52.579Z","avatar_url":"https://github.com/springernature.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kotlin Playbook\n\nHow we write (backend) Kotlin code in the Content Acquisition domain of Springer Nature Digital IT.\n\n_A living document_\n\nWe follow the [standard Kotlin coding conventions](https://kotlinlang.org/docs/reference/coding-conventions.html), although our codebase predates these, and so may occasionaly diverge for historical reasons.\n\nBeyond the standard coding conventions, we have the following rules of thumb:\n\nOrganising the codebase:\n* [Classes, Methods, and Extension Functions](classes-methods-extension-functions/README.md)\n* [Extension functions to avoid bare calls to copy](copying-extension-functions/README.md)\n* [Organising code into files](organising-code/README.md)\n* [Deployable and library modules](modules/README.md)\n* [Tests and supporting code](test-code/README.md)\n\nDesign style:\n* [Immutable domain models](immutable-domain-models/README.md)\n* [Pipelines of transformations](pipelines-of-transformations/README.md)\n* [Reporting and handling errors (exceptions, null, monads, etc.)](error-reporting/README.md)\n* [Speed bumps](speed-bumps/README.md)\n* [Monitoring events, rather than static loggers](monitoring-events/README.md)\n\nTesting:\n* [Testing code that parses data from the network](testing-code-that-parses-data-from-the-network/README.md)\n* [Testing code that writes data to the network](testing-code-that-writes-data-to-the-network/README.md)\n* [Testing multithreaded code](testing-multithreaded-code/README.md)\n\nThings we avoid (in production code):\n* [Avoid `lateinit`](lateinit/README.md)\n* [Avoid the `!!` operator](bang-bang/README.md)\n* [Avoid reflection](reflection/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspringernature%2Fkotlin-playbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspringernature%2Fkotlin-playbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspringernature%2Fkotlin-playbook/lists"}