Skip to content

Enhancement Request: Technology-Specific Project Templates #6

@ahin4114

Description

@ahin4114

Enhancement Request: Technology-Specific Project Templates

Problem Statement

The current avanade-template serves as a generic starting point but lacks technology-specific configurations, leading to significant manual setup work when creating projects for specific tech stacks. As someone who recently used this template for a C# .NET project, I encountered several gaps that required substantial customisation.

Current Template Limitations

The existing template provides:

  • Generic GitHub workflows (shell/JavaScript focused)
  • Basic repository structure
  • General documentation templates
  • Default .gitignore that may not cover technology-specific build artefacts

What's Missing for C# Projects

When creating a .NET/C# project, I had to manually add:

1. Project Structure

  • src/ directory with proper C# project layout
  • .csproj files with appropriate SDK references
  • Solution files (.sln)
  • Test project structure following .NET conventions

2. Build & CI/CD

  • .NET-specific GitHub Actions workflows (dotnet-ci.yml)
  • NuGet package restoration and caching
  • Multi-target framework support (net8.0, net9.0, net10.0)
  • Proper test discovery and execution

3. Development Tools

  • C#-specific .gitignore rules (bin/, obj/, *.user files)
  • EditorConfig for C# formatting standards
  • Roslyn analysers and code style enforcement
  • Visual Studio/VS Code launch configurations

4. Documentation

  • API documentation generation setup
  • NuGet package metadata templates
  • .NET-specific usage examples

Proposed Solution

Create technology-specific template variants that provide opinionated, ready-to-use setups:

Template Variants Suggested

  1. avanade-template-dotnet - C#/.NET projects with CLI/library focus
  2. avanade-template-python - Python projects with packaging/testing setup
  3. avanade-template-typescript - Node.js/TypeScript applications
  4. avanade-template-infrastructure - Terraform/ARM templates for Azure
  5. avanade-template-documentation - Documentation-only projects

Each template would include

  • Technology-specific CI/CD workflows with proper build/test/deploy steps
  • Pre-configured project structure following best practices
  • Development environment setup (devcontainer, VS Code settings)
  • Code quality tools (linters, formatters, security scanners)
  • Dependency management configuration
  • Documentation templates with technology-relevant examples

Benefits

  1. Faster Project Initiation - Developers can start coding immediately rather than spending time on boilerplate setup
  2. Consistent Standards - Each tech stack follows Avanade's established patterns and best practices
  3. Reduced Onboarding Friction - New team members get a familiar, well-structured starting point
  4. Better Security Posture - Templates include security scanning and dependency management from day one

Implementation Approach

  • Maintain the current generic template as the base
  • Create separate repositories for each technology stack (e.g., avanade-template-dotnet)
  • Provide clear documentation on when to use each template
  • Include migration guides for existing projects

Example: C# Template Structure

avanade-template-dotnet/
├── .github/ 
│   ├── instructions/ 
│   │   ├── csharp.instructions.md
│   ├── workflows/ 
│   │   ├── dotnet-ci.yml
│   │   └── nuget-publish.yml 
├── src/ 
│   ├── MyProject/ 
│   │   ├── MyProject.csproj 
│   │   └── Program.cs 
│   └── MyProject.Tests/ 
│       └── MyProject.Tests.csproj 
├── MyProject.sln 
├── Directory.Build.props 
├── .editorconfig 
└── README.md (with .NET-specific examples)

Conclusion

This approach would significantly reduce the gap between template and production-ready code, making the Avanade template ecosystem more valuable for diverse technology projects.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions