# package design

Published articles for package design.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Ep. 2: Elevating Software Design in Go: Package Architecture in Modern Development

DevFeed: [Ep. 2: Elevating Software Design in Go: Package Architecture in Modern Development](<https://devfeed.tech/articles/ep-2-elevating-software-design-in-go-package-architecture-in-modern-development-22235.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2024/05/elevating-software-design-in-go-package-architecture-in-modern-development-ep-2.html>)

Published: 2024-05-21T00:00:00Z

Content type: article

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Code Modularity](<https://devfeed.tech/topics/code-modularity.md>), [system-design-project](<https://devfeed.tech/topics/system-design-project.md>), [software-architecture](<https://devfeed.tech/topics/software-architecture.md>), [Maintainability](<https://devfeed.tech/topics/maintainability.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [code](<https://devfeed.tech/tags/code.md>), [code-modularity](<https://devfeed.tech/tags/code-modularity.md>), [components](<https://devfeed.tech/tags/components.md>), [design](<https://devfeed.tech/tags/design.md>), [designing](<https://devfeed.tech/tags/designing.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [firewalls](<https://devfeed.tech/tags/firewalls.md>), [functionality](<https://devfeed.tech/tags/functionality.md>), [go](<https://devfeed.tech/tags/go.md>), [go-development](<https://devfeed.tech/tags/go-development.md>), [go-projects](<https://devfeed.tech/tags/go-projects.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [modularity](<https://devfeed.tech/tags/modularity.md>), [package](<https://devfeed.tech/tags/package.md>), [package-architecture](<https://devfeed.tech/tags/package-architecture.md>), [package-design](<https://devfeed.tech/tags/package-design.md>), [packages](<https://devfeed.tech/tags/packages.md>), [pitfalls](<https://devfeed.tech/tags/pitfalls.md>), [software](<https://devfeed.tech/tags/software.md>), [software-design](<https://devfeed.tech/tags/software-design.md>)

### AI overview

Bill explains that Go packages create boundaries between program components through encapsulation and modularity, supporting organization and reuse. He recommends packages with focused functionality and warns that generic "Utils" or "Common" packages can weaken code integrity, increase dependencies, and hurt maintainability. The excerpt also introduces a "flipping pyramid" as a caution about monolithic codebases and raises robust type systems as relevant to code integrity and efficiency, without detailing either topic.

### Source excerpt

Introduction: In this insightful episode, Bill dives deep into the realm of package design, shedding light on its crucial role in software development. Here are three key takeaways for Go developers: Code Modularity: Learn how Go's packaging system creates essential firewalls between program components, enhancing maintainability. Focused Functionality: Discover the importance of designing packages that provide specific functionality, fostering code clarity. Avoiding Pitfalls: Bill warns against common package design mistakes like centralized "common" packages, promoting a layered approach to maintainable code.

## Package Oriented Design

DevFeed: [Package Oriented Design](<https://devfeed.tech/articles/package-oriented-design-22122.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2017/02/package-oriented-design.html>)

Published: 2017-02-24T00:00:00Z

Content type: article

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [software-architecture](<https://devfeed.tech/topics/software-architecture.md>), [clean-architecture](<https://devfeed.tech/topics/clean-architecture.md>)

Tags: [2017](<https://devfeed.tech/tags/2017.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [ardan-labs](<https://devfeed.tech/tags/ardan-labs.md>), [blog](<https://devfeed.tech/tags/blog.md>), [cli](<https://devfeed.tech/tags/cli.md>), [communication](<https://devfeed.tech/tags/communication.md>), [company](<https://devfeed.tech/tags/company.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [design](<https://devfeed.tech/tags/design.md>), [domain](<https://devfeed.tech/tags/domain.md>), [go](<https://devfeed.tech/tags/go.md>), [go-programming](<https://devfeed.tech/tags/go-programming.md>), [golang](<https://devfeed.tech/tags/golang.md>), [guidelines](<https://devfeed.tech/tags/guidelines.md>), [latest](<https://devfeed.tech/tags/latest.md>), [less](<https://devfeed.tech/tags/less.md>), [library](<https://devfeed.tech/tags/library.md>), [package](<https://devfeed.tech/tags/package.md>), [package-design](<https://devfeed.tech/tags/package-design.md>), [packages](<https://devfeed.tech/tags/packages.md>), [packaging](<https://devfeed.tech/tags/packaging.md>), [philosophy](<https://devfeed.tech/tags/philosophy.md>), [programming](<https://devfeed.tech/tags/programming.md>), [project](<https://devfeed.tech/tags/project.md>), [team](<https://devfeed.tech/tags/team.md>)

### AI overview

Package Oriented Design uses project structure to clarify where Go packages belong, what guidelines they follow, and how teams discuss architecture; it does not prescribe one universal layout. The excerpt proposes one kit project as a company-wide standard library, with highly portable foundational packages and no vendor folder; third-party dependencies should build against their latest versions. Keeping kit packages in one repository is presented as a way to reduce management work, with vendoring tools allowing projects to select needed packages. Application projects group programs deployed together, keep their source and third-party dependencies in one repository, and should follow a "less is more" approach. The excerpt ends before describing their three root folders.

### Source excerpt

Updated on February 28th, 2017 Prelude This post is part of a series of posts designed to make you think about your own design philosophy on different topics. If you haven't read these posts yet, please do so first: Develop Your Design Philosophy Design Philosophy On Packaging Introduction Package Oriented Design allows a developer to identify where a package belongs inside a Go project and the design guidelines the package must respect. It defines what a Go project is and how a Go project is structured. Finally, it improves communication between team members and promotes clean package design and project architecture that is discussable.