from the delete step and insert step, it doesn't easy to understand why we need this, that's hard to maintain, please also refine it, make the idea as simple as possible :D