-
Notifications
You must be signed in to change notification settings - Fork 9
feat(doc): true-composable-templates #805
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
8618c54
a438e2f
0c7910d
0d1e630
1178d44
96bafcc
18e504c
08c70b3
967557e
2ee77dc
dc2d2f8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,104 @@ | ||||||
| --- | ||||||
| title: True Composable Templates | ||||||
| description: Contemplating on a discussion with another PM who challenged Wing's value proposition versus templates | ||||||
| authors: | ||||||
| - eyalk | ||||||
| tags: [platform engineering, templates, terraform modules, winglang, wing cloud] | ||||||
| image: https://github.com/winglang/docsite/assets/1727147/7c395c6f-9cf2-43c6-b4b1-6a5ba4d058bb | ||||||
| hide_table_of_contents: true | ||||||
| --- | ||||||
|
|
||||||
|  | ||||||
|
|
||||||
| In the journey of software development, particularly for cloud-based projects, templates often | ||||||
| seem like the go-to solution for their promise of speed and simplicity. This notion was at the | ||||||
| forefront of a conversation I had with a Product Manager who doesn’t delve into coding. I had | ||||||
| shared with him about my workshop project, a blend of React, Vite, WebSockets, and a dynamic | ||||||
| counter, which had garnered positive attention for its effectiveness and ease of setup during | ||||||
| a workshop. I told him that the audience was able to create a simple but powerful setup that | ||||||
| worked locally and was deployable on AWS using terraform. I noted that if I would have tried to | ||||||
| achieve this without Wing, it would have taken me two weeks to get to the same point. However, | ||||||
| the Product Manager offered a perspective that prompted deep reflection. He acknowledged the | ||||||
| appeal of my project but pointed out that its functionalities could potentially be replicated | ||||||
| using templates in any technology. The main point of his argument was about differentiation: if | ||||||
| a template can encapsulate all that Wing offers, then what truly sets Wing apart? He didn’t stop | ||||||
| there. He added that templates could be designed with a layer of customization, allowing | ||||||
| developers to tweak them for specific needs. This layer would enable any developer to adapt the | ||||||
| template to their unique project requirements. | ||||||
|
|
||||||
| #### Why are we talking about Templates? | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe add a bunch of concrete examples and links to solutions from the platform engineering space |
||||||
|
|
||||||
| In today's platform engineering space, where companies are creating strong teams with a clear | ||||||
| mission to “empower developers for self service experience in ways that adhere to the enterprise | ||||||
| concern” everything looks like a nail and templates are hammer. Whether they come in a form of | ||||||
| terraform modules, or a set of off the shelf repos you can clone. I would even go far and observe | ||||||
| teams using solutions like Render.com where you pick up a templatized starter project and start | ||||||
| working with it. Templates are a very powerful tool with a very appealing time to value, no wonder | ||||||
| this product manager asked about Wing vs a template on any technology. | ||||||
|
|
||||||
| #### Templates and Their Limits | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Maybe use a bit more conversational tone |
||||||
|
|
||||||
| While templates offer a starting point, their predefined structure can sometimes box in creativity | ||||||
| and innovation. They’re great for getting off the ground quickly but may not always cater to the | ||||||
| nuanced needs of every project. The ability to customize a template does introduce flexibility, | ||||||
| but this can also introduce complexity, requiring developers to navigate and manipulate the | ||||||
| template's constraints to suit their specific objectives. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The text feels a bit too abstract. Maybe lead with a concrete example
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. One example I like to give is what happens if there's a security bug in the template and now we have to chase all copies of the template to fix this bug. |
||||||
|
|
||||||
| #### Template Composition | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| Wing stands out by embracing flexibility and composition from the ground up. It’s not just about | ||||||
| having a framework or a set of functionalities; it’s about how these elements interact and | ||||||
| complement each other. Wing goes beyond the traditional template model by emphasizing seamless | ||||||
| integration and adaptability. The system is designed to let developers piece together different | ||||||
| components like building blocks, ensuring they fit regardless of the project's complexity. | ||||||
|
|
||||||
| When we normally think about composition in programming language we think about a class being | ||||||
| composed of members and inheritance. But in practice a cloud system is not just the composition of | ||||||
| resources, it is also the code and usage patterns that stitches them together. The fact that our | ||||||
| cloud system is composed of an AWS Bedrock Model and a Lambda Function is just part of this | ||||||
| composition. In order for a system to be described (using IaC) the components composition must | ||||||
| consist of which resources are actually calling who. The true composition of a cloud system is also | ||||||
| the access patterns. The introduction of the "onLift" function exemplifies Wing’s innovative | ||||||
| approach. This feature automates the permissions and configurations needed when a cloud function | ||||||
| interacts with other resources, like a bedrock model. With Wing, developers don’t need to manually | ||||||
| set up these connections or permissions. Instead, they can focus on building their application’s | ||||||
| unique features, knowing that Wing handles the underlying integrations smoothly. | ||||||
|
|
||||||
| ```ts | ||||||
| class BedrockModel { | ||||||
| pub onLift(host: std.IInflightHost, ops: Array<str>) { | ||||||
| if let lambda = aws.Function.from(host) { | ||||||
| lambda.addPolicyStatements({ | ||||||
| actions: ["bedrock:InvokeModel"], | ||||||
| effect: aws.Effect.ALLOW, | ||||||
| resources: [ | ||||||
| "arn:aws:bedrock:*::foundation-model/{this.modelId}" | ||||||
| ] | ||||||
| }); | ||||||
| } | ||||||
| } | ||||||
| } | ||||||
| ``` | ||||||
|
|
||||||
| This code snippet illustrates how Wing enables developers to concentrate on what their code is meant to do, | ||||||
| rather than getting entangled in the operational details. | ||||||
| It’s about ensuring all parts of the application can communicate and operate without the developer needing to intervene manually. | ||||||
| In the above example the developer of the bedrock resource, doesn’t know of the callee that is going to use it. | ||||||
| It does know what is required in order to use itself with other resources. | ||||||
| The system identified this indirect composition of resource and call the onLift method of the Bedrock model with the callee as the host. | ||||||
|
|
||||||
| #### The Real Value of Using Wing | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This title is a bit fluffy |
||||||
| The conversation highlighted an important aspect of using templates — the potential for customization to make them fit for any project. | ||||||
| Yet, Wing's true value lies in its foundational approach to building applications. | ||||||
| It's designed for developers who want to go beyond the limitations of templates, | ||||||
| offering a platform where components not only fit together by design but also adapt and evolve as the project grows. | ||||||
| When a project grows, they grow outside the boundaries of what we initially thought should be the template version, | ||||||
| the project setup and architecture needs to allow developers to modify their architecture by allowing developers to refactor and change patterns in the way that fits the current business requirements. | ||||||
|
|
||||||
| ## Conclusion | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe add something personal here |
||||||
| The Product Manager’s insights brought an important dimension to the discussion about Wing versus templates. | ||||||
| While templates, even with customization options, offer a quick start, Wing provides a deeper level of integration and flexibility. | ||||||
| It fosters an environment where development is not just about adapting a template to fit but about creating a tailored, | ||||||
| efficient, and scalable solution from the outset. | ||||||
| Wing represents a shift towards more dynamic and adaptable cloud development, | ||||||
| where the focus is on innovation, scalability, and the seamless integration of diverse components. | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the first part where you describe the conversation with "the product manager" consider using a more personal and conversational tone. Maybe instead of "the product manager", give them a name and add some personal details about them. Make this feel a bit more intimate and less like a detached description of a conversation. If you give your friend a name, it will also make it less awkward down the story when you refer to them.