Skip to content

Evolvable Software Systems

Evobolics Digital, LLC edited this page Mar 8, 2020 · 26 revisions

Abstract

The purpose of this website is to teach users how to build an software architecture that enables software systems to evolve.

Overview

Hundreds of billions of dollars are being wasted on software development each year on failed software projects. This project discusses how to build a software system that is capable of being continuously evolved while running.

Problem Statement

Software engineers need to learn how to engineer evolvable software systems.

Picture of Success

A .NET software platform that can host a software system capable of being changed continuously in an incremental fashion.

Goals

The primary goal of this project is to teach others how to build evolvable software systems and construct a game platform by the end of 2020, similar to battlecode, that allows for two components AI to compete and evolve based upon other competing AIs. The former is to help craft 'silver bullet' for software engineers and inspire others to continue this line of research; more than one solution will be needed since software never stops evolving. The later is mostly for fun since games are a hobby.

Secondary Goals

In addition to the primary goal above, this software development program has the following secondary goals:

  • Demonstrate how to build evolvable systems using a language that businesses often utilize.
  • Explain how the designs came to their current implementations.

Milestones

Development of a Standard API Library Development of a Standard Busing Library

About this Document

This document is a 'living' document that is used to manage and describe this Evobolics software development program.

Technology Stack

This system will be written predominately in .NET C#. One of the secondary goals of the project is demonstrate how to build evolvable systems using a computer language that business utilize; C-Sharp is one of those major languages.

Source Code

Source code for this project is setup in two major azure projects. The first one is named Base and the second is named BattleSharp.

Setting up a Foundation

The first step in constructing systems that can evolve is to build out a software information platform that enables a software system to be constructed using standard building blocks. Any software engineer should have the goal to escape research and development and be able to construct systems in modular fashion. Without modules, it is not possible to break a system design down predictable sized pieces. This set of libraries helps a developer have the ability to create modular software.

This architecture will be broken up into at least five separate solutions. The first one, will house the core base libraries that everything else will be built upon. The second one will allow for object to move around between systems. The third one will be used to build a data framework. The last one, for now, will hold the BattleSharp source code that utilizes this framework.

Core - Enabling the Object Ecosystem

  • Evo.Core.Ioc
  • Evo.Core.Results
  • Evo.Core.Json
  • Evo.Core.Rest
  • Evo.Core.Http
  • Evo.Core.Exceptions
  • Evo.Core.Messaging
  • Evo.Core.Standards
  • Evo.Core.Uow

Data - Enabling Object Storage

  • Evo.Data
  • Evo.Data.EntityFramework
  • Evo.Data.EntityFramework.SqlServer

Systems - Enabling Object Movement

  • Evo.Systems.Identification
  • Evo.Systems.TypeSystem
  • Evo.Systems.Discovery
  • Evo.Systems.Busing.Api
  • Evo.Systems.Busing.MessageQueuing
  • Evo.Systems.Busing.Clients

Dynamics- Enabling Objects to Evolve

These libraries will allow for systems to be able to continuously evolve in change while the application is running.

BattleSharp Libraries

These libraries will utilize the above libraries to build a game engine so the concepts can be visualized and played around with in fun enviornment.

Core Patterns

Separation of Models and Services

Use Extension Methods to Give Models Methods

Link Extension Methods to DI

Data Patterns

Unit of Work

Logic Pattern

Data Pattern