Bringing discipline to development, without causing pain
What happens when young developers meet old business
1 Dec 2015 at 15:31, Adrian Bridgwater
Who cares? DevOps can fix it, right?
You might be wondering at this point, why does all this matter anyway?
We live in a world of DevOps where, even if we end up with large binary assets outside the repository or divided among multiple repositories, we can still coalesce and unify these elements through DevOps magic for builds, testing and onward to releases. Opponents of Distributed Version Control Systems (DVCS) would argue that this is a Band Aid over a bigger problem and that keeping all the assets in one single store is a more prudent method overall.
Indeed, the so-called ‘single source of truth’ dictum is popularised and championed by Agile development with a CAPS A. The difficulty is, quite simply, keeping that single source of truth in one single location in a world where multi-location, multi-tool, multi-disciplinary teams work to a multiplicity of software application requirements with a multiplicity of software assets.
The truth is (and don’t shout it out too loud), that source code is often a tiny drop in the binary bucket compared to documents, images, models, audio, video, even entire virtual-machine (VM) environments for the sake of testing and deployment.
This expansion of assets, it is argued, poses a serious challenge for enterprise Git adoption because the design of its internal file system mandates a practical maximum repository size of a gigabyte or two at most. Even repositories that fall far short of the practical limits can exhibit relatively poor performance, depending on the type and size of assets and operation at hand.
A choice of real world solutions
According to Mark Warren, product marketing director at Perforce, the options here include routes such as ‘narrow cloning’ - a method that while highly desirable, has been pretty much impossible until now. The developer wants to only take the bits they need without getting bogged down or confused by having all the code all the time (e.g. an iOS client developer probably doesn’t care what the Windows Phone client is doing); so a process of narrow cloning allows the coder to pick and mix and mix and match from a cloned selection pack as and when needed.
根据Mark Warren，Perforce的产品市场总监所言，这里的选项包括例如‘narrow cloning’这样的路径——它是一种尽管高度可取但是现在无法实现的方法。开发人员只想采用他们需要的bits，而不是被所有时间的所有代码困扰（例如一个iOS客户端开发人员可能并不在乎Windows Phone客户端做什么）；所以narrow cloning可以使编码员在需要的时候从一个克隆选项中选择，混合和匹配。
It’s mono-repo man
Warren logically points to the rise of the monorepo, as in single repository. He says that a lot of teams are discovering the joys of the monorepo i.e. all the application’s source files exist in one place so that all ‘stakeholders’ can see everything and fully understand the impact of a change (or, indeed, propagate the changes across all projects at the same time).
“This is a very powerful proposition,” argues Warren. “However, using a tool like Git, (which was never intended to hold these gigabytes or terabytes of code and assets) is a real handicap. Unnatural acts are needed to partition up the repo and then to make it behave usefully later, workflows have to adapt to these artificial limits rather than having the tools do what the coders need. Hence the need for an effectively infinitely scalable master repo in Helix, which is especially useful when combined with narrow cloning.”
Where do we go from here?
Unfortunately there are more challenges ahead. If we get past some basic resolution on our approach to cloning and branch management, then have we provisioned for disaster recovery and high availability in the longer term? If we’re going back to the individual developer level (remember where this argument first started?) then the answer is probably going to be no, isn’t it? But we’re here to discuss the technical bridging challenge between developer freedom and enterprise requirements, so disaster recovery and availability does have to be tabled.
Should the development shop employ standby Virtual Machines (VMs) as a means of mirroring changes between file systems so that storage can be swopped out as needed to provide that disaster recovery backbone? The individual developer doesn’t care so much, so the enterprise had better make sure that it does. What about dashboard controls for higher level project management? What about authentication and security concerns？We haven’t even gone there yet.
The realities we can surmise from this discussion are that developers left in the wild will obviously work differently to the way they will work inside more regimented enterprise development shop systems.
We can also agree that a new breed of architectural-level software development tools and delivery methodologies is developing in response to the need to span both functionality and control.
We can also agree the question of whether a light speed car’s lights would turn on contradicts Einstein's special theory of relativity. This means that no object with mass is capable of traveling at or faster than the speed of light due to the object’s resistance to acceleration and the impossibly infinite force that would be needed to be exerted. You see, developers are (almost) always right, so the enterprise had better get used to working with that mindset.
我们也同意光速汽车的灯光是否会打开这个问题contradicts Einstein's special theory of relativity. 这意味着没有物体的质量能够达到或超过光速，因为物体的阻力加速度和有限的力量将会被施加到物体上。你看，开发者几乎一直是正确的，所以公司最好习惯这种心态。